assembly-image 1.7.2 → 1.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/assembly-image/image.rb +17 -2
- data/lib/assembly-image/version.rb +1 -1
- data/spec/image_spec.rb +37 -20
- data/spec/spec_helper.rb +5 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de2f277539baa6ffa387830338c620b57a8af08b43a47663641d5371fe0b2d63
|
4
|
+
data.tar.gz: c136a6686eafa49d3d7bf306027c5c47084e7a5bdcba5280616577b71630e9a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30e6572883cc77167e8f1ee1592e87e3d96e3ae72af80d778e85fcb6a97a36307881ea9116e0ec2cd1a1356248449132e55dbfdc65c83fc749daa5b514fdbe20
|
7
|
+
data.tar.gz: 61cd917ee3658cc6d329d8e5046f0cdd9434bcfec3d607d553e754120d7094256c2e36fab611f348e5faaa00703cb1a44f354c9656ec68cda8da11a9414310e9
|
data/README.md
CHANGED
@@ -50,7 +50,8 @@ perform image operations necessary for accessioning of content.
|
|
50
50
|
* 1.6.5 fix problem with lack of extension in incoming tif causing a problem when creating jp2
|
51
51
|
* 1.6.7 release to github/rubygems
|
52
52
|
* 1.6.9 update mini_exiftool
|
53
|
-
* 1.7.1 for jp2, only transcode to tiff if not a tiff
|
53
|
+
* 1.7.1 for jp2, only transcode to tiff if not a tiff
|
54
|
+
* 1.7.3 for jp2, only transcode to tiff if not an uncompressed tiff
|
54
55
|
|
55
56
|
## Notes
|
56
57
|
|
data/lib/assembly-image/image.rb
CHANGED
@@ -54,6 +54,17 @@ module Assembly
|
|
54
54
|
exif.imagewidth
|
55
55
|
end
|
56
56
|
|
57
|
+
# Examines the input image to determine if it is compressed.
|
58
|
+
#
|
59
|
+
# @return [boolean] true if image is compressed, false if not.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# source_img=Assembly::ObjectFile.new('/input/path_to_file.tif')
|
63
|
+
# puts source_img.compressed? # gives true
|
64
|
+
def compressed?
|
65
|
+
exif.compression != 'Uncompressed'
|
66
|
+
end
|
67
|
+
|
57
68
|
# Add an exif color profile descriptions to the image.
|
58
69
|
# This is useful if your source TIFFs do not have color profile descriptions in the EXIF data, but you know what it should be.
|
59
70
|
# This will allow the images to pass the validaty check and have JP2s created successfully.
|
@@ -118,12 +129,13 @@ module Assembly
|
|
118
129
|
# puts derivative_image.path # '/input/path_to_file.jp2'
|
119
130
|
# rubocop:disable Metrics/AbcSize
|
120
131
|
# rubocop:disable Metrics/MethodLength
|
132
|
+
# rubocop:disable Metrics/CyclomaticComplexity:
|
121
133
|
def create_jp2(params = {})
|
122
134
|
output = params[:output] || jp2_filename
|
123
135
|
create_jp2_checks(output: output, overwrite: params[:overwrite])
|
124
136
|
|
125
137
|
# Using instance variable so that can check in tests.
|
126
|
-
source_path = if
|
138
|
+
source_path = if create_temp_tiff?
|
127
139
|
@tmp_path = make_tmp_tiff(tmp_folder: params[:tmp_folder])
|
128
140
|
else
|
129
141
|
@path
|
@@ -143,7 +155,10 @@ module Assembly
|
|
143
155
|
|
144
156
|
private
|
145
157
|
|
146
|
-
|
158
|
+
def create_temp_tiff?
|
159
|
+
mimetype != 'image/tiff' || compressed?
|
160
|
+
end
|
161
|
+
|
147
162
|
def create_jp2_checks(output:, overwrite:)
|
148
163
|
check_for_file
|
149
164
|
raise 'input file is not a valid image, or is the wrong mimetype' unless jp2able?
|
data/spec/image_spec.rb
CHANGED
@@ -4,32 +4,32 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
# rubocop:disable Metrics/BlockLength
|
6
6
|
describe Assembly::Image do
|
7
|
-
it '
|
7
|
+
it 'does not run if no input file is passed in' do
|
8
8
|
@ai = Assembly::Image.new('')
|
9
9
|
expect{ @ai.create_jp2 }.to raise_error
|
10
10
|
end
|
11
11
|
|
12
|
-
it '
|
12
|
+
it 'indicates the default jp2 filename' do
|
13
13
|
@ai = Assembly::Image.new(TEST_TIF_INPUT_FILE)
|
14
14
|
expect(@ai.jp2_filename).to eq TEST_TIF_INPUT_FILE.gsub('.tif', '.jp2')
|
15
15
|
end
|
16
16
|
|
17
|
-
it '
|
17
|
+
it 'indicates the default jp2 filename' do
|
18
18
|
@ai = Assembly::Image.new('/path/to/a/file_with_no_extension')
|
19
19
|
expect(@ai.jp2_filename).to eq '/path/to/a/file_with_no_extension.jp2'
|
20
20
|
end
|
21
21
|
|
22
|
-
it '
|
22
|
+
it 'indicates the default DPG jp2 filename' do
|
23
23
|
@ai = Assembly::Image.new(TEST_DPG_TIF_INPUT_FILE)
|
24
24
|
expect(@ai.dpg_jp2_filename).to eq TEST_DPG_TIF_INPUT_FILE.gsub('.tif', '.jp2').gsub('_00_', '_05_')
|
25
25
|
end
|
26
26
|
|
27
|
-
it '
|
27
|
+
it 'indicates the default jp2 filename' do
|
28
28
|
@ai = Assembly::Image.new('/path/to/a/file_with_no_00_extension')
|
29
29
|
expect(@ai.dpg_jp2_filename).to eq '/path/to/a/file_with_no_05_extension.jp2'
|
30
30
|
end
|
31
31
|
|
32
|
-
it '
|
32
|
+
it 'creates the jp2 without a temp file when given an uncompressed RGB tif' do
|
33
33
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
34
34
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
35
35
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -46,7 +46,24 @@ describe Assembly::Image do
|
|
46
46
|
expect(@jp2.width).to eq 100
|
47
47
|
end
|
48
48
|
|
49
|
-
it '
|
49
|
+
it 'creates the jp2 with a temp file when given a compressed RGB tif' do
|
50
|
+
generate_test_image(TEST_TIF_INPUT_FILE, compress: true)
|
51
|
+
expect(File).to exist TEST_TIF_INPUT_FILE
|
52
|
+
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
53
|
+
@ai = Assembly::Image.new(TEST_TIF_INPUT_FILE)
|
54
|
+
result = @ai.create_jp2(output: TEST_JP2_OUTPUT_FILE)
|
55
|
+
# Indicates a temp tiff was not created.
|
56
|
+
expect(@ai.tmp_path).to_not be_nil
|
57
|
+
expect(result).to be_a_kind_of Assembly::Image
|
58
|
+
expect(result.path).to eq TEST_JP2_OUTPUT_FILE
|
59
|
+
expect(TEST_JP2_OUTPUT_FILE).to be_a_jp2
|
60
|
+
expect(result.exif.colorspace).to eq 'sRGB'
|
61
|
+
@jp2 = Assembly::Image.new(TEST_JP2_OUTPUT_FILE)
|
62
|
+
expect(@jp2.height).to eq 100
|
63
|
+
expect(@jp2.width).to eq 100
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'creates grayscale jp2 when given a bitonal tif' do
|
50
67
|
skip 'The latest version of Kakadu may require some changes for this work correctly'
|
51
68
|
# error message is
|
52
69
|
# JP2 creation command failed: kdu_compress -precise -no_weights -quiet Creversible=no Cmodes=BYPASS
|
@@ -70,7 +87,7 @@ describe Assembly::Image do
|
|
70
87
|
expect(result.exif.colorspace).to eq 'Grayscale'
|
71
88
|
end
|
72
89
|
|
73
|
-
it '
|
90
|
+
it 'creates color jp2 when given a color tif but bitonal image data (1 channels and 1 bits per pixel)' do
|
74
91
|
generate_test_image(TEST_TIF_INPUT_FILE, color: 'white', image_type: 'TrueColor', profile: '')
|
75
92
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
76
93
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -83,7 +100,7 @@ describe Assembly::Image do
|
|
83
100
|
expect(result.exif.colorspace).to eq 'sRGB'
|
84
101
|
end
|
85
102
|
|
86
|
-
it '
|
103
|
+
it 'creates grayscale jp2 when given a graycale tif but with bitonal image data (1 channel and 1 bits per pixel)' do
|
87
104
|
generate_test_image(TEST_TIF_INPUT_FILE, color: 'white', image_type: 'Grayscale', profile: '')
|
88
105
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
89
106
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -96,7 +113,7 @@ describe Assembly::Image do
|
|
96
113
|
expect(result.exif.colorspace).to eq 'Grayscale'
|
97
114
|
end
|
98
115
|
|
99
|
-
it '
|
116
|
+
it 'creates color jp2 when given a color tif but with greyscale image data (1 channel and 8 bits per pixel)' do
|
100
117
|
generate_test_image(TEST_TIF_INPUT_FILE, color: 'gray', image_type: 'TrueColor', profile: '')
|
101
118
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
102
119
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -109,7 +126,7 @@ describe Assembly::Image do
|
|
109
126
|
expect(result.exif.colorspace).to eq 'sRGB'
|
110
127
|
end
|
111
128
|
|
112
|
-
it '
|
129
|
+
it 'creates a jp2 when the source image has no profile' do
|
113
130
|
generate_test_image(TEST_TIF_INPUT_FILE, profile: '') # generate a test input with no profile
|
114
131
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
115
132
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -123,7 +140,7 @@ describe Assembly::Image do
|
|
123
140
|
expect(TEST_JP2_OUTPUT_FILE).to be_a_jp2
|
124
141
|
end
|
125
142
|
|
126
|
-
it "
|
143
|
+
it "does not run if the output file exists and you don't allow overwriting" do
|
127
144
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
128
145
|
generate_test_image(TEST_JP2_OUTPUT_FILE)
|
129
146
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
@@ -132,14 +149,14 @@ describe Assembly::Image do
|
|
132
149
|
expect{ @ai.create_jp2(output: TEST_JP2_OUTPUT_FILE) }.to raise_error(SecurityError)
|
133
150
|
end
|
134
151
|
|
135
|
-
it '
|
152
|
+
it 'gets the correct image height and width' do
|
136
153
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
137
154
|
@ai = Assembly::Image.new(TEST_TIF_INPUT_FILE)
|
138
155
|
expect(@ai.height).to eq 100
|
139
156
|
expect(@ai.width).to eq 100
|
140
157
|
end
|
141
158
|
|
142
|
-
it '
|
159
|
+
it 'does not run if the input file is a jp2' do
|
143
160
|
generate_test_image(TEST_JP2_OUTPUT_FILE)
|
144
161
|
expect(File).to exist TEST_JP2_OUTPUT_FILE
|
145
162
|
@ai = Assembly::Image.new(TEST_JP2_OUTPUT_FILE)
|
@@ -148,7 +165,7 @@ describe Assembly::Image do
|
|
148
165
|
expect { @ai.create_jp2 }.to raise_error
|
149
166
|
end
|
150
167
|
|
151
|
-
it '
|
168
|
+
it 'runs if you specify a bogus output profile, because this is not currently an option' do
|
152
169
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
153
170
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
154
171
|
@ai = Assembly::Image.new(TEST_TIF_INPUT_FILE)
|
@@ -159,7 +176,7 @@ describe Assembly::Image do
|
|
159
176
|
expect(result.exif.colorspace).to eq 'sRGB'
|
160
177
|
end
|
161
178
|
|
162
|
-
it '
|
179
|
+
it 'creates jp2 when given a JPEG' do
|
163
180
|
generate_test_image(TEST_JPEG_INPUT_FILE)
|
164
181
|
expect(File).to exist TEST_JPEG_INPUT_FILE
|
165
182
|
expect(File).to_not exist TEST_JP2_OUTPUT_FILE
|
@@ -173,7 +190,7 @@ describe Assembly::Image do
|
|
173
190
|
expect(TEST_JP2_OUTPUT_FILE).to be_a_jp2
|
174
191
|
end
|
175
192
|
|
176
|
-
it '
|
193
|
+
it 'does not run if you specify a bogus tmp folder' do
|
177
194
|
generate_test_image(TEST_JPEG_INPUT_FILE)
|
178
195
|
bogus_folder = '/crapsticks'
|
179
196
|
expect(File).to exist TEST_JPEG_INPUT_FILE
|
@@ -182,7 +199,7 @@ describe Assembly::Image do
|
|
182
199
|
expect { @ai.create_jp2(tmp_folder: bogus_folder) }.to raise_error
|
183
200
|
end
|
184
201
|
|
185
|
-
it '
|
202
|
+
it 'creates a jp2 and preserve the temporary file if specified' do
|
186
203
|
generate_test_image(TEST_JPEG_INPUT_FILE)
|
187
204
|
expect(File).to exist TEST_JPEG_INPUT_FILE
|
188
205
|
@ai = Assembly::Image.new(TEST_JPEG_INPUT_FILE)
|
@@ -196,7 +213,7 @@ describe Assembly::Image do
|
|
196
213
|
expect(File.exist?(@ai.tmp_path)).to be true
|
197
214
|
end
|
198
215
|
|
199
|
-
it '
|
216
|
+
it 'creates a jp2 of the same filename and in the same location as the input if no output file is specified, and should cleanup tmp file' do
|
200
217
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
201
218
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
202
219
|
expect(File.exist?(TEST_JP2_INPUT_FILE)).to be false
|
@@ -209,7 +226,7 @@ describe Assembly::Image do
|
|
209
226
|
expect(@ai.tmp_path).to be_nil
|
210
227
|
end
|
211
228
|
|
212
|
-
it '
|
229
|
+
it 'recreates jp2 if the output file exists and if you allow overwriting' do
|
213
230
|
generate_test_image(TEST_TIF_INPUT_FILE)
|
214
231
|
generate_test_image(TEST_JP2_OUTPUT_FILE)
|
215
232
|
expect(File).to exist TEST_TIF_INPUT_FILE
|
data/spec/spec_helper.rb
CHANGED
@@ -15,6 +15,8 @@ TEST_DRUID = 'nx288wh8889'
|
|
15
15
|
|
16
16
|
# generate a sample image file with a specified profile
|
17
17
|
# rubocop:disable Metrics/AbcSize
|
18
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
19
|
+
# rubocop:disable Metrics/MethodLength
|
18
20
|
def generate_test_image(file, params = {})
|
19
21
|
color = params[:color] || 'red'
|
20
22
|
profile = params[:profile] || 'sRGBIEC6196621'
|
@@ -22,12 +24,15 @@ def generate_test_image(file, params = {})
|
|
22
24
|
create_command = "convert -size 100x100 xc:#{color} "
|
23
25
|
create_command += ' -profile ' + File.join(Assembly::PATH_TO_IMAGE_GEM, 'profiles', profile + '.icc') + ' ' unless profile == ''
|
24
26
|
create_command += " -type #{image_type} " if image_type
|
27
|
+
create_command += ' -compress lzw ' if params[:compress]
|
25
28
|
create_command += file
|
26
29
|
create_command += ' 2>&1'
|
27
30
|
output = `#{ create_command }`
|
28
31
|
raise "Failed to create test image #{file} (#{params}): \n#{output}" unless $CHILD_STATUS.success?
|
29
32
|
end
|
30
33
|
# rubocop:enable Metrics/AbcSize
|
34
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
35
|
+
# rubocop:enable Metrics/MethodLength
|
31
36
|
|
32
37
|
def remove_files(dir)
|
33
38
|
Dir.foreach(dir) do |f|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assembly-image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Mangiafico
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2019-
|
14
|
+
date: 2019-04-01 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: assembly-objectfile
|
@@ -155,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project: assembly-image
|
158
|
-
rubygems_version: 2.7.
|
158
|
+
rubygems_version: 2.7.6
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Ruby immplementation of image services needed to prepare objects to be accessioned
|