image_pack 0.2.2 → 0.2.4
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 +17 -0
- data/README.md +108 -119
- data/ext/image_pack/extconf.rb +36 -125
- data/ext/image_pack/image_pack.c +736 -614
- data/ext/image_pack/mozjpeg_sources.rb +178 -0
- data/ext/image_pack/vendor/mozjpeg/BUILDING.md +744 -0
- data/ext/image_pack/vendor/mozjpeg/CODE_OF_CONDUCT.md +15 -0
- data/ext/image_pack/vendor/mozjpeg/ChangeLog.md +1996 -0
- data/lib/image_pack/configuration.rb +54 -8
- data/lib/image_pack/version.rb +1 -1
- data/lib/image_pack.rb +87 -25
- metadata +14 -79
- data/ext/image_pack/vendor/mozjpeg/README.ijg +0 -258
- data/ext/image_pack/vendor/mozjpeg/cdjpeg.c +0 -156
- data/ext/image_pack/vendor/mozjpeg/cjpeg.c +0 -961
- data/ext/image_pack/vendor/mozjpeg/djpeg.c +0 -855
- data/ext/image_pack/vendor/mozjpeg/jaricom.c +0 -157
- data/ext/image_pack/vendor/mozjpeg/jcarith.c +0 -972
- data/ext/image_pack/vendor/mozjpeg/jcstest.c +0 -126
- data/ext/image_pack/vendor/mozjpeg/jdarith.c +0 -782
- data/ext/image_pack/vendor/mozjpeg/jdatadst-tj.c +0 -198
- data/ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c +0 -194
- data/ext/image_pack/vendor/mozjpeg/jpegtran.c +0 -827
- data/ext/image_pack/vendor/mozjpeg/jpegyuv.c +0 -172
- data/ext/image_pack/vendor/mozjpeg/rdbmp.c +0 -690
- data/ext/image_pack/vendor/mozjpeg/rdcolmap.c +0 -253
- data/ext/image_pack/vendor/mozjpeg/rdgif.c +0 -720
- data/ext/image_pack/vendor/mozjpeg/rdjpeg.c +0 -160
- data/ext/image_pack/vendor/mozjpeg/rdjpgcom.c +0 -494
- data/ext/image_pack/vendor/mozjpeg/rdpng.c +0 -194
- data/ext/image_pack/vendor/mozjpeg/rdppm.c +0 -781
- data/ext/image_pack/vendor/mozjpeg/rdswitch.c +0 -642
- data/ext/image_pack/vendor/mozjpeg/rdtarga.c +0 -508
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c +0 -148
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c +0 -334
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c +0 -976
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c +0 -1312
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c +0 -1143
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c +0 -455
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c +0 -148
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c +0 -132
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c +0 -374
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c +0 -98
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c +0 -415
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c +0 -139
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c +0 -149
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c +0 -615
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c +0 -304
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c +0 -255
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c +0 -398
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c +0 -395
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c +0 -571
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c +0 -124
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c +0 -866
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c +0 -269
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c +0 -116
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c +0 -111
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c +0 -228
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c +0 -159
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c +0 -276
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c +0 -106
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c +0 -130
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c +0 -329
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c +0 -400
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c +0 -154
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c +0 -258
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c +0 -255
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c +0 -357
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c +0 -250
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c +0 -884
- data/ext/image_pack/vendor/mozjpeg/strtest.c +0 -170
- data/ext/image_pack/vendor/mozjpeg/tjbench.c +0 -1044
- data/ext/image_pack/vendor/mozjpeg/tjexample.c +0 -406
- data/ext/image_pack/vendor/mozjpeg/tjunittest.c +0 -961
- data/ext/image_pack/vendor/mozjpeg/tjutil.c +0 -70
- data/ext/image_pack/vendor/mozjpeg/transupp.c +0 -2373
- data/ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c +0 -1259
- data/ext/image_pack/vendor/mozjpeg/turbojpeg.c +0 -2320
- data/ext/image_pack/vendor/mozjpeg/wrbmp.c +0 -552
- data/ext/image_pack/vendor/mozjpeg/wrgif.c +0 -580
- data/ext/image_pack/vendor/mozjpeg/wrjpgcom.c +0 -577
- data/ext/image_pack/vendor/mozjpeg/wrppm.c +0 -366
- data/ext/image_pack/vendor/mozjpeg/wrtarga.c +0 -258
- data/ext/image_pack/vendor/mozjpeg/yuvjpeg.c +0 -268
|
@@ -2,14 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
module ImagePack
|
|
4
4
|
class Configuration
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
SIZE_ATTRIBUTES = %i[
|
|
6
|
+
direct_input_threshold
|
|
7
|
+
direct_pixel_threshold
|
|
8
|
+
max_pixels
|
|
9
|
+
max_output_size
|
|
10
|
+
max_input_size
|
|
11
|
+
].freeze
|
|
12
|
+
|
|
13
|
+
INT_ATTRIBUTES = %i[
|
|
14
|
+
max_width
|
|
15
|
+
max_height
|
|
16
|
+
].freeze
|
|
17
|
+
|
|
18
|
+
attr_reader :execution,
|
|
19
|
+
:direct_input_threshold,
|
|
20
|
+
:direct_pixel_threshold,
|
|
21
|
+
:max_pixels,
|
|
22
|
+
:max_width,
|
|
23
|
+
:max_height,
|
|
24
|
+
:max_output_size,
|
|
25
|
+
:max_input_size
|
|
13
26
|
|
|
14
27
|
def initialize
|
|
15
28
|
@execution = :auto
|
|
@@ -21,5 +34,38 @@ module ImagePack
|
|
|
21
34
|
@max_output_size = 256 * 1024 * 1024
|
|
22
35
|
@max_input_size = 256 * 1024 * 1024
|
|
23
36
|
end
|
|
37
|
+
|
|
38
|
+
def execution=(value)
|
|
39
|
+
unless ImagePack::EXECUTION_MODES.include?(value)
|
|
40
|
+
raise InvalidArgumentError, "execution must be one of #{ImagePack::EXECUTION_MODES}, got: #{value.inspect}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if value == :offload && ImagePack.respond_to?(:offload_safe?) && !ImagePack.offload_safe?
|
|
44
|
+
raise UnsupportedError,
|
|
45
|
+
"execution: :offload is unavailable in this runtime; it requires Ruby >= 3.4.0 and IMAGE_PACK_DISABLE_OFFLOAD must not be set"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
@execution = value
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
SIZE_ATTRIBUTES.each do |name|
|
|
52
|
+
define_method("#{name}=") do |value|
|
|
53
|
+
instance_variable_set("@#{name}", validate_nonnegative_integer!(name, value))
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
INT_ATTRIBUTES.each do |name|
|
|
58
|
+
define_method("#{name}=") do |value|
|
|
59
|
+
instance_variable_set("@#{name}", validate_nonnegative_integer!(name, value))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def validate_nonnegative_integer!(name, value)
|
|
66
|
+
return value if value.is_a?(Integer) && value >= 0
|
|
67
|
+
|
|
68
|
+
raise InvalidArgumentError, "#{name} must be an Integer >= 0, got: #{value.inspect}"
|
|
69
|
+
end
|
|
24
70
|
end
|
|
25
71
|
end
|
data/lib/image_pack/version.rb
CHANGED
data/lib/image_pack.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
required = Gem::Version.new("3.
|
|
3
|
+
required = Gem::Version.new("3.1.0")
|
|
4
4
|
current = Gem::Version.new(RUBY_VERSION)
|
|
5
5
|
|
|
6
6
|
if current < required
|
|
7
7
|
raise LoadError,
|
|
8
|
-
"image_pack requires Ruby >= 3.
|
|
9
|
-
"
|
|
8
|
+
"image_pack requires Ruby >= 3.1.0, got #{RUBY_VERSION}. " \
|
|
9
|
+
"Ruby >= 3.4.0 is required only for execution: :offload."
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
require "pathname"
|
|
@@ -50,10 +50,15 @@ module ImagePack
|
|
|
50
50
|
{
|
|
51
51
|
version: VERSION,
|
|
52
52
|
mozjpeg: defined?(NATIVE_MOZJPEG_VERSION) ? NATIVE_MOZJPEG_VERSION : nil,
|
|
53
|
-
simd: defined?(NATIVE_SIMD) ? NATIVE_SIMD : nil
|
|
53
|
+
simd: defined?(NATIVE_SIMD) ? NATIVE_SIMD : nil,
|
|
54
|
+
offload_safe: offload_safe?
|
|
54
55
|
}
|
|
55
56
|
end
|
|
56
57
|
|
|
58
|
+
def offload_safe?
|
|
59
|
+
defined?(NATIVE_OFFLOAD_SAFE) && NATIVE_OFFLOAD_SAFE == true
|
|
60
|
+
end
|
|
61
|
+
|
|
57
62
|
def compress_bytes(bytes, **options)
|
|
58
63
|
raise InvalidArgumentError, "bytes must be a String" unless bytes.is_a?(String)
|
|
59
64
|
|
|
@@ -85,9 +90,15 @@ module ImagePack
|
|
|
85
90
|
progressive: true,
|
|
86
91
|
strip_metadata: false,
|
|
87
92
|
execution: nil,
|
|
88
|
-
cancellable: false
|
|
93
|
+
cancellable: false,
|
|
94
|
+
strict: false)
|
|
95
|
+
validate_boolean!(:progressive, progressive)
|
|
96
|
+
validate_boolean!(:strip_metadata, strip_metadata)
|
|
97
|
+
validate_boolean!(:cancellable, cancellable)
|
|
98
|
+
validate_boolean!(:strict, strict)
|
|
89
99
|
execution ||= configuration.execution
|
|
90
100
|
validate_execution!(execution)
|
|
101
|
+
validate_execution_supported!(execution)
|
|
91
102
|
validate_cancellable!(:lossless_optimize, execution, cancellable)
|
|
92
103
|
|
|
93
104
|
normalized_input_kind = input_kind!(input)
|
|
@@ -100,7 +111,8 @@ module ImagePack
|
|
|
100
111
|
strip_metadata ? 1 : 0,
|
|
101
112
|
execution,
|
|
102
113
|
cancellable ? 1 : 0,
|
|
103
|
-
has_scheduler ? 1 : 0
|
|
114
|
+
has_scheduler ? 1 : 0,
|
|
115
|
+
strict ? 1 : 0)
|
|
104
116
|
end
|
|
105
117
|
|
|
106
118
|
def compress(input,
|
|
@@ -112,16 +124,24 @@ module ImagePack
|
|
|
112
124
|
progressive: false,
|
|
113
125
|
strip_metadata: true,
|
|
114
126
|
execution: nil,
|
|
115
|
-
cancellable: false
|
|
127
|
+
cancellable: false,
|
|
128
|
+
report: false,
|
|
129
|
+
strict: false)
|
|
116
130
|
validate_algo!(algo)
|
|
117
131
|
validate_min_ssim!(min_ssim)
|
|
118
|
-
|
|
132
|
+
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
133
|
+
validate_boolean!(:progressive, progressive)
|
|
134
|
+
validate_boolean!(:strip_metadata, strip_metadata)
|
|
135
|
+
validate_boolean!(:cancellable, cancellable)
|
|
136
|
+
validate_boolean!(:report, report)
|
|
137
|
+
validate_boolean!(:strict, strict)
|
|
119
138
|
quality_was_given = !quality.nil?
|
|
120
139
|
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
121
140
|
effective_quality = 1 if min_ssim && !quality_was_given
|
|
122
141
|
validate_quality!(effective_quality)
|
|
123
142
|
execution ||= configuration.execution
|
|
124
143
|
validate_execution!(execution)
|
|
144
|
+
validate_execution_supported!(execution)
|
|
125
145
|
validate_cancellable!(algo, execution, cancellable)
|
|
126
146
|
|
|
127
147
|
normalized_input_kind = input_kind!(input)
|
|
@@ -130,14 +150,16 @@ module ImagePack
|
|
|
130
150
|
|
|
131
151
|
__compress_jpeg(input, normalized_input_kind,
|
|
132
152
|
output, normalized_output_kind,
|
|
133
|
-
ALGO_TO_NATIVE.fetch(algo), effective_quality
|
|
153
|
+
ALGO_TO_NATIVE.fetch(algo), effective_quality,
|
|
134
154
|
min_ssim ? min_ssim.to_f : 0.0,
|
|
135
155
|
mozjpeg_trellis ? 1 : 0,
|
|
136
156
|
progressive ? 1 : 0,
|
|
137
157
|
strip_metadata ? 1 : 0,
|
|
138
158
|
execution,
|
|
139
159
|
cancellable ? 1 : 0,
|
|
140
|
-
has_scheduler ? 1 : 0
|
|
160
|
+
has_scheduler ? 1 : 0,
|
|
161
|
+
report ? 1 : 0,
|
|
162
|
+
strict ? 1 : 0)
|
|
141
163
|
end
|
|
142
164
|
|
|
143
165
|
def compress_pixels(buffer,
|
|
@@ -146,21 +168,37 @@ module ImagePack
|
|
|
146
168
|
channels:,
|
|
147
169
|
output: nil,
|
|
148
170
|
algo: DEFAULT_ALGO,
|
|
149
|
-
quality:
|
|
171
|
+
quality: nil,
|
|
150
172
|
min_ssim: nil,
|
|
173
|
+
mozjpeg_trellis: true,
|
|
151
174
|
progressive: false,
|
|
152
175
|
drop_alpha: nil,
|
|
176
|
+
exact_size: false,
|
|
153
177
|
execution: nil,
|
|
154
|
-
cancellable: false
|
|
178
|
+
cancellable: false,
|
|
179
|
+
report: false,
|
|
180
|
+
strict: false)
|
|
181
|
+
validate_pixel_buffer!(buffer)
|
|
155
182
|
validate_algo!(algo)
|
|
156
183
|
validate_min_ssim!(min_ssim)
|
|
157
|
-
|
|
184
|
+
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
185
|
+
validate_boolean!(:progressive, progressive)
|
|
186
|
+
validate_drop_alpha!(drop_alpha)
|
|
187
|
+
validate_boolean!(:exact_size, exact_size)
|
|
188
|
+
validate_boolean!(:cancellable, cancellable)
|
|
189
|
+
validate_boolean!(:report, report)
|
|
190
|
+
validate_boolean!(:strict, strict)
|
|
191
|
+
quality_was_given = !quality.nil?
|
|
192
|
+
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
193
|
+
effective_quality = 1 if min_ssim && !quality_was_given
|
|
194
|
+
validate_quality!(effective_quality)
|
|
158
195
|
validate_dimensions!(width, height, channels)
|
|
159
196
|
execution ||= configuration.execution
|
|
160
197
|
validate_execution!(execution)
|
|
198
|
+
validate_execution_supported!(execution)
|
|
161
199
|
validate_cancellable!(algo, execution, cancellable)
|
|
162
200
|
|
|
163
|
-
if channels
|
|
201
|
+
if channels == 4
|
|
164
202
|
case drop_alpha
|
|
165
203
|
when nil
|
|
166
204
|
warn "ImagePack.compress_pixels: RGBA input has its alpha channel " \
|
|
@@ -175,19 +213,23 @@ module ImagePack
|
|
|
175
213
|
normalized_output_kind = output_kind!(output)
|
|
176
214
|
has_scheduler = fiber_scheduler_active?
|
|
177
215
|
|
|
178
|
-
if min_ssim && channels
|
|
216
|
+
if min_ssim && channels == 4
|
|
179
217
|
raise UnsupportedError, "min_ssim is not supported for RGBA input"
|
|
180
218
|
end
|
|
181
219
|
|
|
182
220
|
__compress_pixels(buffer,
|
|
183
|
-
width
|
|
221
|
+
width, height, channels,
|
|
184
222
|
output, normalized_output_kind,
|
|
185
|
-
ALGO_TO_NATIVE.fetch(algo),
|
|
223
|
+
ALGO_TO_NATIVE.fetch(algo), effective_quality,
|
|
186
224
|
min_ssim ? min_ssim.to_f : 0.0,
|
|
225
|
+
mozjpeg_trellis ? 1 : 0,
|
|
187
226
|
progressive ? 1 : 0,
|
|
227
|
+
exact_size ? 1 : 0,
|
|
188
228
|
execution,
|
|
189
229
|
cancellable ? 1 : 0,
|
|
190
|
-
has_scheduler ? 1 : 0
|
|
230
|
+
has_scheduler ? 1 : 0,
|
|
231
|
+
report ? 1 : 0,
|
|
232
|
+
strict ? 1 : 0)
|
|
191
233
|
end
|
|
192
234
|
|
|
193
235
|
def inspect_image(input)
|
|
@@ -224,7 +266,7 @@ module ImagePack
|
|
|
224
266
|
return :return_string if output.nil?
|
|
225
267
|
return :path if output.is_a?(String) || output.is_a?(Pathname)
|
|
226
268
|
|
|
227
|
-
raise InvalidArgumentError, "output must be nil, String path, or Pathname
|
|
269
|
+
raise InvalidArgumentError, "output must be nil, String path, or Pathname"
|
|
228
270
|
end
|
|
229
271
|
|
|
230
272
|
def validate_algo!(algo)
|
|
@@ -246,11 +288,16 @@ module ImagePack
|
|
|
246
288
|
raise InvalidArgumentError, "min_ssim must be Numeric > 0.0 and <= 1.0, got: #{min_ssim.inspect}"
|
|
247
289
|
end
|
|
248
290
|
|
|
249
|
-
|
|
250
|
-
def validate_mozjpeg_trellis!(value)
|
|
291
|
+
def validate_boolean!(name, value)
|
|
251
292
|
return if value == true || value == false
|
|
252
293
|
|
|
253
|
-
raise InvalidArgumentError, "
|
|
294
|
+
raise InvalidArgumentError, "#{name} must be true or false, got: #{value.inspect}"
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def validate_drop_alpha!(value)
|
|
298
|
+
return if value.nil? || value == true || value == false
|
|
299
|
+
|
|
300
|
+
raise InvalidArgumentError, "drop_alpha must be true, false, or nil, got: #{value.inspect}"
|
|
254
301
|
end
|
|
255
302
|
|
|
256
303
|
def validate_execution!(execution)
|
|
@@ -259,12 +306,27 @@ module ImagePack
|
|
|
259
306
|
raise InvalidArgumentError, "execution must be one of #{EXECUTION_MODES}, got: #{execution.inspect}"
|
|
260
307
|
end
|
|
261
308
|
|
|
309
|
+
def validate_execution_supported!(execution)
|
|
310
|
+
return unless execution == :offload
|
|
311
|
+
return if offload_safe?
|
|
312
|
+
|
|
313
|
+
raise UnsupportedError,
|
|
314
|
+
"execution: :offload is unavailable in this runtime; it requires Ruby >= 3.4.0 and IMAGE_PACK_DISABLE_OFFLOAD must not be set"
|
|
315
|
+
end
|
|
316
|
+
|
|
262
317
|
def validate_dimensions!(width, height, channels)
|
|
263
|
-
raise InvalidArgumentError, "width must be > 0" unless width.is_a?(Integer) && width.positive?
|
|
264
|
-
raise InvalidArgumentError, "height must be > 0" unless height.is_a?(Integer) && height.positive?
|
|
318
|
+
raise InvalidArgumentError, "width must be Integer > 0" unless width.is_a?(Integer) && width.positive?
|
|
319
|
+
raise InvalidArgumentError, "height must be Integer > 0" unless height.is_a?(Integer) && height.positive?
|
|
265
320
|
raise InvalidArgumentError, "channels must be 1, 3 or 4" unless [1, 3, 4].include?(channels)
|
|
266
321
|
end
|
|
267
322
|
|
|
323
|
+
def validate_pixel_buffer!(buffer)
|
|
324
|
+
return if buffer.is_a?(String)
|
|
325
|
+
return if defined?(IO::Buffer) && buffer.is_a?(IO::Buffer)
|
|
326
|
+
|
|
327
|
+
raise InvalidArgumentError, "pixel buffer must be a String or IO::Buffer"
|
|
328
|
+
end
|
|
329
|
+
|
|
268
330
|
def validate_cancellable!(_algo, execution, cancellable)
|
|
269
331
|
return unless cancellable
|
|
270
332
|
return unless execution == :direct
|
|
@@ -274,7 +336,7 @@ module ImagePack
|
|
|
274
336
|
end
|
|
275
337
|
|
|
276
338
|
def fiber_scheduler_active?
|
|
277
|
-
Fiber.respond_to?(:scheduler) && !Fiber.scheduler.nil?
|
|
339
|
+
offload_safe? && Fiber.respond_to?(:scheduler) && !Fiber.scheduler.nil?
|
|
278
340
|
end
|
|
279
341
|
end
|
|
280
342
|
end
|
metadata
CHANGED
|
@@ -1,13 +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.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Roman Haydarov
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: exe
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2026-06-17 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: rake
|
|
@@ -79,9 +80,9 @@ dependencies:
|
|
|
79
80
|
- - "~>"
|
|
80
81
|
- !ruby/object:Gem::Version
|
|
81
82
|
version: '2.21'
|
|
82
|
-
description: Single API, vendored pure-C MozJPEG/libjpeg codec,
|
|
83
|
-
|
|
84
|
-
libjpeg, git, or CMake required.
|
|
83
|
+
description: Single API, vendored pure-C MozJPEG/libjpeg codec, in-memory compression
|
|
84
|
+
and atomic file output, Ruby 3.1+ native JPEG execution; Ruby 3.4+ enables Fiber::Scheduler-aware
|
|
85
|
+
offload. Ships vendored C sources — no system libjpeg, git, or CMake required.
|
|
85
86
|
email:
|
|
86
87
|
- romnhajdarov@gmail.com
|
|
87
88
|
executables: []
|
|
@@ -95,27 +96,25 @@ files:
|
|
|
95
96
|
- THIRD_PARTY_NOTICES.md
|
|
96
97
|
- ext/image_pack/extconf.rb
|
|
97
98
|
- ext/image_pack/image_pack.c
|
|
99
|
+
- ext/image_pack/mozjpeg_sources.rb
|
|
98
100
|
- ext/image_pack/vendor/.vendored
|
|
101
|
+
- ext/image_pack/vendor/mozjpeg/BUILDING.md
|
|
99
102
|
- ext/image_pack/vendor/mozjpeg/BUILDING.txt
|
|
100
103
|
- ext/image_pack/vendor/mozjpeg/CMakeLists.txt
|
|
104
|
+
- ext/image_pack/vendor/mozjpeg/CODE_OF_CONDUCT.md
|
|
105
|
+
- ext/image_pack/vendor/mozjpeg/ChangeLog.md
|
|
101
106
|
- ext/image_pack/vendor/mozjpeg/LICENSE.md
|
|
102
107
|
- ext/image_pack/vendor/mozjpeg/README-mozilla.txt
|
|
103
108
|
- ext/image_pack/vendor/mozjpeg/README-turbo.txt
|
|
104
|
-
- ext/image_pack/vendor/mozjpeg/README.ijg
|
|
105
109
|
- ext/image_pack/vendor/mozjpeg/README.md
|
|
106
110
|
- ext/image_pack/vendor/mozjpeg/cderror.h
|
|
107
|
-
- ext/image_pack/vendor/mozjpeg/cdjpeg.c
|
|
108
111
|
- ext/image_pack/vendor/mozjpeg/cdjpeg.h
|
|
109
|
-
- ext/image_pack/vendor/mozjpeg/cjpeg.c
|
|
110
112
|
- ext/image_pack/vendor/mozjpeg/cmyk.h
|
|
111
113
|
- ext/image_pack/vendor/mozjpeg/coderules.txt
|
|
112
114
|
- ext/image_pack/vendor/mozjpeg/croptest.in
|
|
113
|
-
- ext/image_pack/vendor/mozjpeg/djpeg.c
|
|
114
115
|
- ext/image_pack/vendor/mozjpeg/example.txt
|
|
115
|
-
- ext/image_pack/vendor/mozjpeg/jaricom.c
|
|
116
116
|
- ext/image_pack/vendor/mozjpeg/jcapimin.c
|
|
117
117
|
- ext/image_pack/vendor/mozjpeg/jcapistd.c
|
|
118
|
-
- ext/image_pack/vendor/mozjpeg/jcarith.c
|
|
119
118
|
- ext/image_pack/vendor/mozjpeg/jccoefct.c
|
|
120
119
|
- ext/image_pack/vendor/mozjpeg/jccolext.c
|
|
121
120
|
- ext/image_pack/vendor/mozjpeg/jccolor.c
|
|
@@ -137,14 +136,10 @@ files:
|
|
|
137
136
|
- ext/image_pack/vendor/mozjpeg/jcphuff.c
|
|
138
137
|
- ext/image_pack/vendor/mozjpeg/jcprepct.c
|
|
139
138
|
- ext/image_pack/vendor/mozjpeg/jcsample.c
|
|
140
|
-
- ext/image_pack/vendor/mozjpeg/jcstest.c
|
|
141
139
|
- ext/image_pack/vendor/mozjpeg/jctrans.c
|
|
142
140
|
- ext/image_pack/vendor/mozjpeg/jdapimin.c
|
|
143
141
|
- ext/image_pack/vendor/mozjpeg/jdapistd.c
|
|
144
|
-
- ext/image_pack/vendor/mozjpeg/jdarith.c
|
|
145
|
-
- ext/image_pack/vendor/mozjpeg/jdatadst-tj.c
|
|
146
142
|
- ext/image_pack/vendor/mozjpeg/jdatadst.c
|
|
147
|
-
- ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c
|
|
148
143
|
- ext/image_pack/vendor/mozjpeg/jdatasrc.c
|
|
149
144
|
- ext/image_pack/vendor/mozjpeg/jdcoefct.c
|
|
150
145
|
- ext/image_pack/vendor/mozjpeg/jdcoefct.h
|
|
@@ -189,8 +184,6 @@ files:
|
|
|
189
184
|
- ext/image_pack/vendor/mozjpeg/jpegcomp.h
|
|
190
185
|
- ext/image_pack/vendor/mozjpeg/jpegint.h
|
|
191
186
|
- ext/image_pack/vendor/mozjpeg/jpeglib.h
|
|
192
|
-
- ext/image_pack/vendor/mozjpeg/jpegtran.c
|
|
193
|
-
- ext/image_pack/vendor/mozjpeg/jpegyuv.c
|
|
194
187
|
- ext/image_pack/vendor/mozjpeg/jquant1.c
|
|
195
188
|
- ext/image_pack/vendor/mozjpeg/jquant2.c
|
|
196
189
|
- ext/image_pack/vendor/mozjpeg/jsimd.h
|
|
@@ -201,18 +194,6 @@ files:
|
|
|
201
194
|
- ext/image_pack/vendor/mozjpeg/jversion.h.in
|
|
202
195
|
- ext/image_pack/vendor/mozjpeg/libjpeg.map.in
|
|
203
196
|
- ext/image_pack/vendor/mozjpeg/libjpeg.txt
|
|
204
|
-
- ext/image_pack/vendor/mozjpeg/rdbmp.c
|
|
205
|
-
- ext/image_pack/vendor/mozjpeg/rdcolmap.c
|
|
206
|
-
- ext/image_pack/vendor/mozjpeg/rdgif.c
|
|
207
|
-
- ext/image_pack/vendor/mozjpeg/rdjpeg.c
|
|
208
|
-
- ext/image_pack/vendor/mozjpeg/rdjpgcom.c
|
|
209
|
-
- ext/image_pack/vendor/mozjpeg/rdpng.c
|
|
210
|
-
- ext/image_pack/vendor/mozjpeg/rdppm.c
|
|
211
|
-
- ext/image_pack/vendor/mozjpeg/rdswitch.c
|
|
212
|
-
- ext/image_pack/vendor/mozjpeg/rdtarga.c
|
|
213
|
-
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c
|
|
214
|
-
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c
|
|
215
|
-
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c
|
|
216
197
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S
|
|
217
198
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c
|
|
218
199
|
- ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c
|
|
@@ -293,29 +274,11 @@ files:
|
|
|
293
274
|
- ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm
|
|
294
275
|
- ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm
|
|
295
276
|
- ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm
|
|
296
|
-
- ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c
|
|
297
277
|
- ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm
|
|
298
278
|
- ext/image_pack/vendor/mozjpeg/simd/jsimd.h
|
|
299
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c
|
|
300
279
|
- ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S
|
|
301
280
|
- ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h
|
|
302
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c
|
|
303
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c
|
|
304
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c
|
|
305
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c
|
|
306
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c
|
|
307
281
|
- ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h
|
|
308
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c
|
|
309
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c
|
|
310
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c
|
|
311
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c
|
|
312
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c
|
|
313
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c
|
|
314
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c
|
|
315
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c
|
|
316
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c
|
|
317
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c
|
|
318
|
-
- ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c
|
|
319
282
|
- ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h
|
|
320
283
|
- ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h
|
|
321
284
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc
|
|
@@ -323,23 +286,7 @@ files:
|
|
|
323
286
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc
|
|
324
287
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h
|
|
325
288
|
- ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc
|
|
326
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c
|
|
327
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c
|
|
328
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c
|
|
329
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c
|
|
330
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c
|
|
331
289
|
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h
|
|
332
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c
|
|
333
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c
|
|
334
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c
|
|
335
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c
|
|
336
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c
|
|
337
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c
|
|
338
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c
|
|
339
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c
|
|
340
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c
|
|
341
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c
|
|
342
|
-
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c
|
|
343
290
|
- ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h
|
|
344
291
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm
|
|
345
292
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm
|
|
@@ -377,30 +324,16 @@ files:
|
|
|
377
324
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-sse2.asm
|
|
378
325
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c
|
|
379
326
|
- ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm
|
|
380
|
-
- ext/image_pack/vendor/mozjpeg/strtest.c
|
|
381
327
|
- ext/image_pack/vendor/mozjpeg/structure.txt
|
|
382
|
-
- ext/image_pack/vendor/mozjpeg/tjbench.c
|
|
383
328
|
- ext/image_pack/vendor/mozjpeg/tjbenchtest.in
|
|
384
329
|
- ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in
|
|
385
|
-
- ext/image_pack/vendor/mozjpeg/tjexample.c
|
|
386
330
|
- ext/image_pack/vendor/mozjpeg/tjexampletest.in
|
|
387
331
|
- ext/image_pack/vendor/mozjpeg/tjexampletest.java.in
|
|
388
|
-
- ext/image_pack/vendor/mozjpeg/tjunittest.c
|
|
389
|
-
- ext/image_pack/vendor/mozjpeg/tjutil.c
|
|
390
332
|
- ext/image_pack/vendor/mozjpeg/tjutil.h
|
|
391
|
-
- ext/image_pack/vendor/mozjpeg/transupp.c
|
|
392
333
|
- ext/image_pack/vendor/mozjpeg/transupp.h
|
|
393
|
-
- ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c
|
|
394
|
-
- ext/image_pack/vendor/mozjpeg/turbojpeg.c
|
|
395
334
|
- ext/image_pack/vendor/mozjpeg/turbojpeg.h
|
|
396
335
|
- ext/image_pack/vendor/mozjpeg/usage.txt
|
|
397
336
|
- ext/image_pack/vendor/mozjpeg/wizard.txt
|
|
398
|
-
- ext/image_pack/vendor/mozjpeg/wrbmp.c
|
|
399
|
-
- ext/image_pack/vendor/mozjpeg/wrgif.c
|
|
400
|
-
- ext/image_pack/vendor/mozjpeg/wrjpgcom.c
|
|
401
|
-
- ext/image_pack/vendor/mozjpeg/wrppm.c
|
|
402
|
-
- ext/image_pack/vendor/mozjpeg/wrtarga.c
|
|
403
|
-
- ext/image_pack/vendor/mozjpeg/yuvjpeg.c
|
|
404
337
|
- lib/image_pack.rb
|
|
405
338
|
- lib/image_pack/configuration.rb
|
|
406
339
|
- lib/image_pack/errors.rb
|
|
@@ -412,6 +345,7 @@ metadata:
|
|
|
412
345
|
homepage_uri: https://github.com/roman-haidarov/image_pack
|
|
413
346
|
source_code_uri: https://github.com/roman-haidarov/image_pack
|
|
414
347
|
changelog_uri: https://github.com/roman-haidarov/image_pack/blob/main/CHANGELOG.md
|
|
348
|
+
post_install_message:
|
|
415
349
|
rdoc_options: []
|
|
416
350
|
require_paths:
|
|
417
351
|
- lib
|
|
@@ -419,14 +353,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
419
353
|
requirements:
|
|
420
354
|
- - ">="
|
|
421
355
|
- !ruby/object:Gem::Version
|
|
422
|
-
version: 3.
|
|
356
|
+
version: 3.1.0
|
|
423
357
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
424
358
|
requirements:
|
|
425
359
|
- - ">="
|
|
426
360
|
- !ruby/object:Gem::Version
|
|
427
361
|
version: '0'
|
|
428
362
|
requirements: []
|
|
429
|
-
rubygems_version: 3.
|
|
363
|
+
rubygems_version: 3.3.27
|
|
364
|
+
signing_key:
|
|
430
365
|
specification_version: 4
|
|
431
366
|
summary: 'Ruby-native pure-C JPEG runtime: MozJPEG/libjpeg'
|
|
432
367
|
test_files: []
|