assembly-image 1.7.2 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|