image_pack 0.2.5 → 0.2.7
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/CHANGELOG.md +32 -0
- data/README.md +29 -5
- data/ext/image_pack/extconf.rb +2 -2
- data/ext/image_pack/image_pack.c +742 -263
- data/ext/image_pack/mozjpeg_sources.rb +5 -0
- data/ext/image_pack/vendor/mozjpeg/transupp.c +2373 -0
- data/lib/image_pack/version.rb +1 -1
- data/lib/image_pack.rb +121 -7
- metadata +6 -104
- data/ext/image_pack/vendor/mozjpeg/croptest.in +0 -95
- data/ext/image_pack/vendor/mozjpeg/libjpeg.map.in +0 -11
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S +0 -1200
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S +0 -2254
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm +0 -578
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm +0 -476
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm +0 -503
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm +0 -121
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm +0 -121
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm +0 -120
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm +0 -113
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm +0 -113
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm +0 -112
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm +0 -457
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm +0 -355
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm +0 -382
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm +0 -761
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm +0 -662
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm +0 -388
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm +0 -324
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm +0 -351
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm +0 -515
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm +0 -404
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm +0 -458
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm +0 -118
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm +0 -117
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm +0 -117
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm +0 -136
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm +0 -123
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm +0 -135
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm +0 -575
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm +0 -460
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm +0 -517
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm +0 -760
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm +0 -731
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm +0 -724
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm +0 -318
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm +0 -369
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm +0 -395
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm +0 -403
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm +0 -331
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm +0 -620
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm +0 -633
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm +0 -451
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm +0 -571
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm +0 -497
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm +0 -499
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm +0 -501
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm +0 -453
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm +0 -851
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm +0 -858
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm +0 -704
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm +0 -592
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm +0 -230
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm +0 -276
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm +0 -208
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm +0 -168
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm +0 -188
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm +0 -201
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm +0 -135
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S +0 -4543
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h +0 -292
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h +0 -28
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h +0 -69
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h +0 -1334
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h +0 -28
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h +0 -98
- data/ext/image_pack/vendor/mozjpeg/tjbenchtest.in +0 -256
- data/ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in +0 -215
- data/ext/image_pack/vendor/mozjpeg/tjexampletest.in +0 -149
- data/ext/image_pack/vendor/mozjpeg/tjexampletest.java.in +0 -151
data/lib/image_pack/version.rb
CHANGED
data/lib/image_pack.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
required = Gem::Version.new("
|
|
3
|
+
required = Gem::Version.new("2.7.1")
|
|
4
4
|
current = Gem::Version.new(RUBY_VERSION)
|
|
5
5
|
|
|
6
6
|
if current < required
|
|
7
7
|
raise LoadError,
|
|
8
|
-
"image_pack requires Ruby >=
|
|
8
|
+
"image_pack requires Ruby >= 2.7.1, got #{RUBY_VERSION}. " \
|
|
9
9
|
"Ruby >= 3.4.0 is required only for execution: :offload."
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -31,8 +31,15 @@ module ImagePack
|
|
|
31
31
|
ALGOS = %i[jpeg_turbo mozjpeg fast size].freeze
|
|
32
32
|
ALGO_TO_NATIVE = { jpeg_turbo: :jpeg_turbo, mozjpeg: :mozjpeg, fast: :jpeg_turbo, size: :mozjpeg }.freeze
|
|
33
33
|
EXECUTION_MODES = %i[direct nogvl offload auto].freeze
|
|
34
|
+
SUBSAMPLING_MODES = %i[auto 420 422 444].freeze
|
|
35
|
+
TUNE_MODES = %i[hvs ssim ms_ssim psnr].freeze
|
|
36
|
+
EFFORT_MODES = %i[default fast max].freeze
|
|
37
|
+
SUBSAMPLING_TO_NATIVE = { auto: 0, "420": 1, "422": 2, "444": 3 }.freeze
|
|
38
|
+
TUNE_TO_NATIVE = { hvs: 0, ssim: 1, ms_ssim: 2, psnr: 3 }.freeze
|
|
39
|
+
EFFORT_TO_NATIVE = { default: 0, fast: 1, max: 2 }.freeze
|
|
34
40
|
DEFAULT_QUALITY = 82
|
|
35
41
|
DEFAULT_ALGO = :mozjpeg
|
|
42
|
+
AUTO_444_QUALITY = 90
|
|
36
43
|
|
|
37
44
|
class << self
|
|
38
45
|
def configuration
|
|
@@ -59,6 +66,15 @@ module ImagePack
|
|
|
59
66
|
defined?(NATIVE_OFFLOAD_SAFE) && NATIVE_OFFLOAD_SAFE == true
|
|
60
67
|
end
|
|
61
68
|
|
|
69
|
+
def warn_if_scalar!
|
|
70
|
+
return if !defined?(NATIVE_SIMD) || NATIVE_SIMD
|
|
71
|
+
return if @scalar_warned
|
|
72
|
+
|
|
73
|
+
@scalar_warned = true
|
|
74
|
+
warn "ImagePack: this native build is scalar (no SIMD). On x86_64 install nasm " \
|
|
75
|
+
"and reinstall the gem for ~3-4x faster JPEG encode/decode."
|
|
76
|
+
end
|
|
77
|
+
|
|
62
78
|
def compress_bytes(bytes, **options)
|
|
63
79
|
raise InvalidArgumentError, "bytes must be a String" unless bytes.is_a?(String)
|
|
64
80
|
|
|
@@ -89,11 +105,16 @@ module ImagePack
|
|
|
89
105
|
output: nil,
|
|
90
106
|
progressive: true,
|
|
91
107
|
strip_metadata: false,
|
|
108
|
+
strip_icc: false,
|
|
109
|
+
trim: false,
|
|
92
110
|
execution: nil,
|
|
93
111
|
cancellable: false,
|
|
94
112
|
strict: false)
|
|
113
|
+
warn_if_scalar!
|
|
95
114
|
validate_boolean!(:progressive, progressive)
|
|
96
115
|
validate_boolean!(:strip_metadata, strip_metadata)
|
|
116
|
+
validate_boolean!(:strip_icc, strip_icc)
|
|
117
|
+
validate_boolean!(:trim, trim)
|
|
97
118
|
validate_boolean!(:cancellable, cancellable)
|
|
98
119
|
validate_boolean!(:strict, strict)
|
|
99
120
|
execution ||= configuration.execution
|
|
@@ -112,7 +133,9 @@ module ImagePack
|
|
|
112
133
|
execution,
|
|
113
134
|
cancellable ? 1 : 0,
|
|
114
135
|
has_scheduler ? 1 : 0,
|
|
115
|
-
strict ? 1 : 0
|
|
136
|
+
strict ? 1 : 0,
|
|
137
|
+
strip_icc ? 1 : 0,
|
|
138
|
+
trim ? 1 : 0)
|
|
116
139
|
end
|
|
117
140
|
|
|
118
141
|
def compress(input,
|
|
@@ -121,23 +144,37 @@ module ImagePack
|
|
|
121
144
|
quality: nil,
|
|
122
145
|
min_ssim: nil,
|
|
123
146
|
mozjpeg_trellis: true,
|
|
124
|
-
mozjpeg_scan_opt:
|
|
147
|
+
mozjpeg_scan_opt: nil,
|
|
125
148
|
progressive: nil,
|
|
126
149
|
strip_metadata: true,
|
|
150
|
+
strip_icc: false,
|
|
151
|
+
subsampling: :auto,
|
|
152
|
+
tune: :hvs,
|
|
153
|
+
effort: :default,
|
|
154
|
+
scale: 1,
|
|
127
155
|
execution: nil,
|
|
128
156
|
cancellable: false,
|
|
129
157
|
report: false,
|
|
130
158
|
strict: false)
|
|
159
|
+
warn_if_scalar!
|
|
131
160
|
validate_algo!(algo)
|
|
132
161
|
validate_min_ssim!(min_ssim)
|
|
133
162
|
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
163
|
+
scan_opt_given = !mozjpeg_scan_opt.nil?
|
|
164
|
+
mozjpeg_scan_opt = true unless scan_opt_given
|
|
134
165
|
validate_boolean!(:mozjpeg_scan_opt, mozjpeg_scan_opt)
|
|
135
166
|
progressive = default_progressive_for(algo, progressive)
|
|
136
167
|
validate_boolean!(:progressive, progressive)
|
|
137
168
|
validate_boolean!(:strip_metadata, strip_metadata)
|
|
169
|
+
validate_boolean!(:strip_icc, strip_icc)
|
|
138
170
|
validate_boolean!(:cancellable, cancellable)
|
|
139
171
|
validate_boolean!(:report, report)
|
|
140
172
|
validate_boolean!(:strict, strict)
|
|
173
|
+
subsampling = validate_subsampling!(subsampling)
|
|
174
|
+
tune = validate_tune!(tune)
|
|
175
|
+
effort = validate_effort!(effort)
|
|
176
|
+
scale_num, scale_denom = validate_scale!(scale)
|
|
177
|
+
mozjpeg_scan_opt = false if effort == :fast && !scan_opt_given
|
|
141
178
|
quality_was_given = !quality.nil?
|
|
142
179
|
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
143
180
|
effective_quality = 1 if min_ssim && !quality_was_given
|
|
@@ -163,7 +200,12 @@ module ImagePack
|
|
|
163
200
|
has_scheduler ? 1 : 0,
|
|
164
201
|
report ? 1 : 0,
|
|
165
202
|
strict ? 1 : 0,
|
|
166
|
-
mozjpeg_scan_opt ? 1 : 0
|
|
203
|
+
mozjpeg_scan_opt ? 1 : 0,
|
|
204
|
+
strip_icc ? 1 : 0,
|
|
205
|
+
SUBSAMPLING_TO_NATIVE.fetch(subsampling),
|
|
206
|
+
TUNE_TO_NATIVE.fetch(tune),
|
|
207
|
+
EFFORT_TO_NATIVE.fetch(effort),
|
|
208
|
+
scale_num, scale_denom)
|
|
167
209
|
end
|
|
168
210
|
|
|
169
211
|
def compress_pixels(buffer,
|
|
@@ -175,18 +217,24 @@ module ImagePack
|
|
|
175
217
|
quality: nil,
|
|
176
218
|
min_ssim: nil,
|
|
177
219
|
mozjpeg_trellis: true,
|
|
178
|
-
mozjpeg_scan_opt:
|
|
220
|
+
mozjpeg_scan_opt: nil,
|
|
179
221
|
progressive: nil,
|
|
180
222
|
drop_alpha: nil,
|
|
181
223
|
exact_size: false,
|
|
224
|
+
subsampling: :auto,
|
|
225
|
+
tune: :hvs,
|
|
226
|
+
effort: :default,
|
|
182
227
|
execution: nil,
|
|
183
228
|
cancellable: false,
|
|
184
229
|
report: false,
|
|
185
230
|
strict: false)
|
|
231
|
+
warn_if_scalar!
|
|
186
232
|
validate_pixel_buffer!(buffer)
|
|
187
233
|
validate_algo!(algo)
|
|
188
234
|
validate_min_ssim!(min_ssim)
|
|
189
235
|
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
236
|
+
scan_opt_given = !mozjpeg_scan_opt.nil?
|
|
237
|
+
mozjpeg_scan_opt = true unless scan_opt_given
|
|
190
238
|
validate_boolean!(:mozjpeg_scan_opt, mozjpeg_scan_opt)
|
|
191
239
|
progressive = default_progressive_for(algo, progressive)
|
|
192
240
|
validate_boolean!(:progressive, progressive)
|
|
@@ -195,6 +243,10 @@ module ImagePack
|
|
|
195
243
|
validate_boolean!(:cancellable, cancellable)
|
|
196
244
|
validate_boolean!(:report, report)
|
|
197
245
|
validate_boolean!(:strict, strict)
|
|
246
|
+
subsampling = validate_subsampling!(subsampling)
|
|
247
|
+
tune = validate_tune!(tune)
|
|
248
|
+
effort = validate_effort!(effort)
|
|
249
|
+
mozjpeg_scan_opt = false if effort == :fast && !scan_opt_given
|
|
198
250
|
quality_was_given = !quality.nil?
|
|
199
251
|
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
200
252
|
effective_quality = 1 if min_ssim && !quality_was_given
|
|
@@ -237,10 +289,14 @@ module ImagePack
|
|
|
237
289
|
has_scheduler ? 1 : 0,
|
|
238
290
|
report ? 1 : 0,
|
|
239
291
|
strict ? 1 : 0,
|
|
240
|
-
mozjpeg_scan_opt ? 1 : 0
|
|
292
|
+
mozjpeg_scan_opt ? 1 : 0,
|
|
293
|
+
SUBSAMPLING_TO_NATIVE.fetch(subsampling),
|
|
294
|
+
TUNE_TO_NATIVE.fetch(tune),
|
|
295
|
+
EFFORT_TO_NATIVE.fetch(effort))
|
|
241
296
|
end
|
|
242
297
|
|
|
243
298
|
def inspect_image(input)
|
|
299
|
+
warn_if_scalar!
|
|
244
300
|
__inspect_image(input, input_kind!(input))
|
|
245
301
|
end
|
|
246
302
|
|
|
@@ -296,6 +352,64 @@ module ImagePack
|
|
|
296
352
|
raise InvalidArgumentError, "min_ssim must be Numeric > 0.0 and <= 1.0, got: #{min_ssim.inspect}"
|
|
297
353
|
end
|
|
298
354
|
|
|
355
|
+
def validate_subsampling!(value)
|
|
356
|
+
value = value.to_s.to_sym if value.is_a?(Integer) || value.is_a?(String)
|
|
357
|
+
return value if SUBSAMPLING_MODES.include?(value)
|
|
358
|
+
|
|
359
|
+
raise InvalidArgumentError,
|
|
360
|
+
"subsampling must be one of #{SUBSAMPLING_MODES}, got: #{value.inspect}"
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def validate_tune!(value)
|
|
364
|
+
return value if TUNE_MODES.include?(value)
|
|
365
|
+
|
|
366
|
+
raise InvalidArgumentError, "tune must be one of #{TUNE_MODES}, got: #{value.inspect}"
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
def validate_effort!(value)
|
|
370
|
+
return value if EFFORT_MODES.include?(value)
|
|
371
|
+
|
|
372
|
+
raise InvalidArgumentError, "effort must be one of #{EFFORT_MODES}, got: #{value.inspect}"
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def validate_scale!(value)
|
|
376
|
+
num, denom =
|
|
377
|
+
case value
|
|
378
|
+
when Integer
|
|
379
|
+
raise InvalidArgumentError, "scale must be a positive fraction, got: #{value.inspect}" unless value.positive?
|
|
380
|
+
|
|
381
|
+
[value, 1]
|
|
382
|
+
when Float
|
|
383
|
+
if value == 1.0
|
|
384
|
+
[1, 1]
|
|
385
|
+
elsif value == 0.5
|
|
386
|
+
[1, 2]
|
|
387
|
+
elsif value == 0.25
|
|
388
|
+
[1, 4]
|
|
389
|
+
elsif value == 0.125
|
|
390
|
+
[1, 8]
|
|
391
|
+
else
|
|
392
|
+
raise InvalidArgumentError,
|
|
393
|
+
"scale float must be 1.0, 0.5, 0.25, or 0.125, got: #{value.inspect}"
|
|
394
|
+
end
|
|
395
|
+
when Rational
|
|
396
|
+
[value.numerator, value.denominator]
|
|
397
|
+
when Array
|
|
398
|
+
raise InvalidArgumentError, "scale array must be [num, denom], got: #{value.inspect}" unless value.length == 2
|
|
399
|
+
|
|
400
|
+
value
|
|
401
|
+
else
|
|
402
|
+
raise InvalidArgumentError,
|
|
403
|
+
"scale must be 1, 0.5, 0.25, 0.125, Rational, or [num, denom], got: #{value.inspect}"
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
unless num.is_a?(Integer) && denom.is_a?(Integer) && num.positive? && denom.positive?
|
|
407
|
+
raise InvalidArgumentError, "scale numerator/denominator must be Integers > 0, got: #{value.inspect}"
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
[num, denom]
|
|
411
|
+
end
|
|
412
|
+
|
|
299
413
|
def validate_boolean!(name, value)
|
|
300
414
|
return if value == true || value == false
|
|
301
415
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: image_pack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Roman Haydarov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-08-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -52,36 +52,8 @@ dependencies:
|
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '5.0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: benchmark-ips
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.13'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.13'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: async
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '2.21'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '2.21'
|
|
83
55
|
description: Single API, vendored pure-C MozJPEG/libjpeg codec, in-memory compression
|
|
84
|
-
and atomic file output, Ruby
|
|
56
|
+
and atomic file output, Ruby 2.7.1+ native JPEG execution; Ruby 3.4+ enables Fiber::Scheduler-aware
|
|
85
57
|
offload. Ships vendored C sources — no system libjpeg, git, or CMake required.
|
|
86
58
|
email:
|
|
87
59
|
- romnhajdarov@gmail.com
|
|
@@ -111,7 +83,6 @@ files:
|
|
|
111
83
|
- ext/image_pack/vendor/mozjpeg/cdjpeg.h
|
|
112
84
|
- ext/image_pack/vendor/mozjpeg/cmyk.h
|
|
113
85
|
- ext/image_pack/vendor/mozjpeg/coderules.txt
|
|
114
|
-
- ext/image_pack/vendor/mozjpeg/croptest.in
|
|
115
86
|
- ext/image_pack/vendor/mozjpeg/example.txt
|
|
116
87
|
- ext/image_pack/vendor/mozjpeg/jcapimin.c
|
|
117
88
|
- ext/image_pack/vendor/mozjpeg/jcapistd.c
|
|
@@ -192,13 +163,10 @@ files:
|
|
|
192
163
|
- ext/image_pack/vendor/mozjpeg/jstdhuff.c
|
|
193
164
|
- ext/image_pack/vendor/mozjpeg/jutils.c
|
|
194
165
|
- ext/image_pack/vendor/mozjpeg/jversion.h.in
|
|
195
|
-
- ext/image_pack/vendor/mozjpeg/libjpeg.map.in
|
|
196
166
|
- ext/image_pack/vendor/mozjpeg/libjpeg.txt
|
|
197
|
-
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S
|
|
198
167
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c
|
|
199
168
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c
|
|
200
169
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd.c
|
|
201
|
-
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S
|
|
202
170
|
- ext/image_pack/vendor/mozjpeg/simd/arm/align.h
|
|
203
171
|
- ext/image_pack/vendor/mozjpeg/simd/arm/jccolor-neon.c
|
|
204
172
|
- ext/image_pack/vendor/mozjpeg/simd/arm/jcgray-neon.c
|
|
@@ -219,75 +187,12 @@ files:
|
|
|
219
187
|
- ext/image_pack/vendor/mozjpeg/simd/arm/jquanti-neon.c
|
|
220
188
|
- ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h
|
|
221
189
|
- ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h.in
|
|
222
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm
|
|
223
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm
|
|
224
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm
|
|
225
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm
|
|
226
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm
|
|
227
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm
|
|
228
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm
|
|
229
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm
|
|
230
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm
|
|
231
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm
|
|
232
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm
|
|
233
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm
|
|
234
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm
|
|
235
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm
|
|
236
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm
|
|
237
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm
|
|
238
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm
|
|
239
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm
|
|
240
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm
|
|
241
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm
|
|
242
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm
|
|
243
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm
|
|
244
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm
|
|
245
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm
|
|
246
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm
|
|
247
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm
|
|
248
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm
|
|
249
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm
|
|
250
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm
|
|
251
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm
|
|
252
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm
|
|
253
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm
|
|
254
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm
|
|
255
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm
|
|
256
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm
|
|
257
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm
|
|
258
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm
|
|
259
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm
|
|
260
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm
|
|
261
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm
|
|
262
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm
|
|
263
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm
|
|
264
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm
|
|
265
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm
|
|
266
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm
|
|
267
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm
|
|
268
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm
|
|
269
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm
|
|
270
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm
|
|
271
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm
|
|
272
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm
|
|
273
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm
|
|
274
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm
|
|
275
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm
|
|
276
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm
|
|
277
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm
|
|
278
190
|
- ext/image_pack/vendor/mozjpeg/simd/jsimd.h
|
|
279
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S
|
|
280
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h
|
|
281
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h
|
|
282
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h
|
|
283
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h
|
|
284
191
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc
|
|
285
192
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jdct.inc
|
|
286
193
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc
|
|
287
194
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h
|
|
288
195
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc
|
|
289
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h
|
|
290
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h
|
|
291
196
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm
|
|
292
197
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm
|
|
293
198
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-avx2.asm
|
|
@@ -325,11 +230,8 @@ files:
|
|
|
325
230
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c
|
|
326
231
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm
|
|
327
232
|
- ext/image_pack/vendor/mozjpeg/structure.txt
|
|
328
|
-
- ext/image_pack/vendor/mozjpeg/tjbenchtest.in
|
|
329
|
-
- ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in
|
|
330
|
-
- ext/image_pack/vendor/mozjpeg/tjexampletest.in
|
|
331
|
-
- ext/image_pack/vendor/mozjpeg/tjexampletest.java.in
|
|
332
233
|
- ext/image_pack/vendor/mozjpeg/tjutil.h
|
|
234
|
+
- ext/image_pack/vendor/mozjpeg/transupp.c
|
|
333
235
|
- ext/image_pack/vendor/mozjpeg/transupp.h
|
|
334
236
|
- ext/image_pack/vendor/mozjpeg/turbojpeg.h
|
|
335
237
|
- ext/image_pack/vendor/mozjpeg/usage.txt
|
|
@@ -353,14 +255,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
353
255
|
requirements:
|
|
354
256
|
- - ">="
|
|
355
257
|
- !ruby/object:Gem::Version
|
|
356
|
-
version:
|
|
258
|
+
version: 2.7.1
|
|
357
259
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
358
260
|
requirements:
|
|
359
261
|
- - ">="
|
|
360
262
|
- !ruby/object:Gem::Version
|
|
361
263
|
version: '0'
|
|
362
264
|
requirements: []
|
|
363
|
-
rubygems_version: 3.
|
|
265
|
+
rubygems_version: 3.4.22
|
|
364
266
|
signing_key:
|
|
365
267
|
specification_version: 4
|
|
366
268
|
summary: 'Ruby-native pure-C JPEG runtime: MozJPEG/libjpeg'
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -u
|
|
4
|
-
set -e
|
|
5
|
-
trap onexit INT
|
|
6
|
-
trap onexit TERM
|
|
7
|
-
trap onexit EXIT
|
|
8
|
-
|
|
9
|
-
onexit()
|
|
10
|
-
{
|
|
11
|
-
if [ -d $OUTDIR ]; then
|
|
12
|
-
rm -rf $OUTDIR
|
|
13
|
-
fi
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
runme()
|
|
17
|
-
{
|
|
18
|
-
echo \*\*\* $*
|
|
19
|
-
$*
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
IMAGE=vgl_6548_0026a.bmp
|
|
23
|
-
WIDTH=128
|
|
24
|
-
HEIGHT=95
|
|
25
|
-
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
|
|
26
|
-
OUTDIR=`mktemp -d /tmp/__croptest_output.XXXXXX`
|
|
27
|
-
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
|
|
28
|
-
|
|
29
|
-
if [ -d $OUTDIR ]; then
|
|
30
|
-
rm -rf $OUTDIR
|
|
31
|
-
fi
|
|
32
|
-
mkdir -p $OUTDIR
|
|
33
|
-
|
|
34
|
-
exec >$EXEDIR/croptest.log
|
|
35
|
-
|
|
36
|
-
echo "============================================================"
|
|
37
|
-
echo "$IMAGE ($WIDTH x $HEIGHT)"
|
|
38
|
-
echo "============================================================"
|
|
39
|
-
echo
|
|
40
|
-
|
|
41
|
-
for PROGARG in "" -progressive; do
|
|
42
|
-
|
|
43
|
-
cp $IMGDIR/$IMAGE $OUTDIR
|
|
44
|
-
basename=`basename $IMAGE .bmp`
|
|
45
|
-
echo "------------------------------------------------------------"
|
|
46
|
-
echo "Generating test images"
|
|
47
|
-
echo "------------------------------------------------------------"
|
|
48
|
-
echo
|
|
49
|
-
runme $EXEDIR/cjpeg $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY.jpg $IMGDIR/${basename}.bmp
|
|
50
|
-
runme $EXEDIR/cjpeg $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420.jpg $IMGDIR/${basename}.bmp
|
|
51
|
-
runme $EXEDIR/cjpeg $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422.jpg $IMGDIR/${basename}.bmp
|
|
52
|
-
runme $EXEDIR/cjpeg $PROGARG -sample 1x2 -outfile $OUTDIR/${basename}_440.jpg $IMGDIR/${basename}.bmp
|
|
53
|
-
runme $EXEDIR/cjpeg $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444.jpg $IMGDIR/${basename}.bmp
|
|
54
|
-
echo
|
|
55
|
-
|
|
56
|
-
for NSARG in "" -nosmooth; do
|
|
57
|
-
|
|
58
|
-
for COLORSARG in "" "-colors 256 -dither none -onepass"; do
|
|
59
|
-
|
|
60
|
-
for Y in {0..16}; do
|
|
61
|
-
|
|
62
|
-
for H in {1..16}; do
|
|
63
|
-
|
|
64
|
-
X=$(( (Y*16)%128 ))
|
|
65
|
-
W=$(( WIDTH-X-7 ))
|
|
66
|
-
if [ $Y -le 15 ]; then
|
|
67
|
-
CROPSPEC="${W}x${H}+${X}+${Y}"
|
|
68
|
-
else
|
|
69
|
-
Y2=$(( HEIGHT-H ));
|
|
70
|
-
CROPSPEC="${W}x${H}+${X}+${Y2}"
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
echo "------------------------------------------------------------"
|
|
74
|
-
echo $PROGARG $NSARG $COLORSARG -crop $CROPSPEC
|
|
75
|
-
echo "------------------------------------------------------------"
|
|
76
|
-
echo
|
|
77
|
-
for samp in GRAY 420 422 440 444; do
|
|
78
|
-
$EXEDIR/djpeg $NSARG $COLORSARG -rgb -outfile $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}.jpg
|
|
79
|
-
convert -crop $CROPSPEC $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}_ref.ppm
|
|
80
|
-
runme $EXEDIR/djpeg $NSARG $COLORSARG -crop $CROPSPEC -rgb -outfile $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}.jpg
|
|
81
|
-
runme cmp $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}_ref.ppm
|
|
82
|
-
done
|
|
83
|
-
echo
|
|
84
|
-
|
|
85
|
-
done
|
|
86
|
-
|
|
87
|
-
done
|
|
88
|
-
|
|
89
|
-
done
|
|
90
|
-
|
|
91
|
-
done
|
|
92
|
-
|
|
93
|
-
done
|
|
94
|
-
|
|
95
|
-
echo SUCCESS!
|