image_pack 0.2.1 → 0.2.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/CHANGELOG.md +20 -0
- data/README.md +75 -16
- data/ext/image_pack/extconf.rb +41 -126
- data/ext/image_pack/image_pack.c +1151 -596
- 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 +124 -41
- metadata +13 -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
- data/lib/image_pack/backend.rb +0 -8
|
@@ -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 requires Ruby >= 3.4.0; use execution: :nogvl or :auto"
|
|
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"
|
|
@@ -46,6 +46,72 @@ module ImagePack
|
|
|
46
46
|
configuration
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
+
def build_info
|
|
50
|
+
{
|
|
51
|
+
version: VERSION,
|
|
52
|
+
mozjpeg: defined?(NATIVE_MOZJPEG_VERSION) ? NATIVE_MOZJPEG_VERSION : nil,
|
|
53
|
+
simd: defined?(NATIVE_SIMD) ? NATIVE_SIMD : nil,
|
|
54
|
+
offload_safe: offload_safe?
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def offload_safe?
|
|
59
|
+
defined?(NATIVE_OFFLOAD_SAFE) && NATIVE_OFFLOAD_SAFE == true
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def compress_bytes(bytes, **options)
|
|
63
|
+
raise InvalidArgumentError, "bytes must be a String" unless bytes.is_a?(String)
|
|
64
|
+
|
|
65
|
+
compress(bytes.b, **options)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def compress_file(path, **options)
|
|
69
|
+
pathname = Pathname(path)
|
|
70
|
+
raise InvalidArgumentError, "input path does not exist: #{pathname}" unless pathname.file?
|
|
71
|
+
|
|
72
|
+
compress(pathname, **options)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def optimize_bytes(bytes, **options)
|
|
76
|
+
raise InvalidArgumentError, "bytes must be a String" unless bytes.is_a?(String)
|
|
77
|
+
|
|
78
|
+
optimize_jpeg(bytes.b, **options)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def optimize_file(path, **options)
|
|
82
|
+
pathname = Pathname(path)
|
|
83
|
+
raise InvalidArgumentError, "input path does not exist: #{pathname}" unless pathname.file?
|
|
84
|
+
|
|
85
|
+
optimize_jpeg(pathname, **options)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def optimize_jpeg(input,
|
|
89
|
+
output: nil,
|
|
90
|
+
progressive: true,
|
|
91
|
+
strip_metadata: false,
|
|
92
|
+
execution: nil,
|
|
93
|
+
cancellable: false)
|
|
94
|
+
validate_boolean!(:progressive, progressive)
|
|
95
|
+
validate_boolean!(:strip_metadata, strip_metadata)
|
|
96
|
+
validate_boolean!(:cancellable, cancellable)
|
|
97
|
+
execution ||= configuration.execution
|
|
98
|
+
validate_execution!(execution)
|
|
99
|
+
validate_execution_supported!(execution)
|
|
100
|
+
validate_cancellable!(:lossless_optimize, execution, cancellable)
|
|
101
|
+
|
|
102
|
+
normalized_input_kind = input_kind!(input)
|
|
103
|
+
normalized_output_kind = output_kind!(output)
|
|
104
|
+
has_scheduler = fiber_scheduler_active?
|
|
105
|
+
|
|
106
|
+
__optimize_jpeg(input, normalized_input_kind,
|
|
107
|
+
output, normalized_output_kind,
|
|
108
|
+
progressive ? 1 : 0,
|
|
109
|
+
strip_metadata ? 1 : 0,
|
|
110
|
+
execution,
|
|
111
|
+
cancellable ? 1 : 0,
|
|
112
|
+
has_scheduler ? 1 : 0)
|
|
113
|
+
end
|
|
114
|
+
|
|
49
115
|
def compress(input,
|
|
50
116
|
output: nil,
|
|
51
117
|
algo: DEFAULT_ALGO,
|
|
@@ -58,13 +124,17 @@ module ImagePack
|
|
|
58
124
|
cancellable: false)
|
|
59
125
|
validate_algo!(algo)
|
|
60
126
|
validate_min_ssim!(min_ssim)
|
|
61
|
-
|
|
127
|
+
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
128
|
+
validate_boolean!(:progressive, progressive)
|
|
129
|
+
validate_boolean!(:strip_metadata, strip_metadata)
|
|
130
|
+
validate_boolean!(:cancellable, cancellable)
|
|
62
131
|
quality_was_given = !quality.nil?
|
|
63
132
|
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
64
133
|
effective_quality = 1 if min_ssim && !quality_was_given
|
|
65
134
|
validate_quality!(effective_quality)
|
|
66
135
|
execution ||= configuration.execution
|
|
67
136
|
validate_execution!(execution)
|
|
137
|
+
validate_execution_supported!(execution)
|
|
68
138
|
validate_cancellable!(algo, execution, cancellable)
|
|
69
139
|
|
|
70
140
|
normalized_input_kind = input_kind!(input)
|
|
@@ -73,7 +143,7 @@ module ImagePack
|
|
|
73
143
|
|
|
74
144
|
__compress_jpeg(input, normalized_input_kind,
|
|
75
145
|
output, normalized_output_kind,
|
|
76
|
-
ALGO_TO_NATIVE.fetch(algo), effective_quality
|
|
146
|
+
ALGO_TO_NATIVE.fetch(algo), effective_quality,
|
|
77
147
|
min_ssim ? min_ssim.to_f : 0.0,
|
|
78
148
|
mozjpeg_trellis ? 1 : 0,
|
|
79
149
|
progressive ? 1 : 0,
|
|
@@ -89,21 +159,33 @@ module ImagePack
|
|
|
89
159
|
channels:,
|
|
90
160
|
output: nil,
|
|
91
161
|
algo: DEFAULT_ALGO,
|
|
92
|
-
quality:
|
|
162
|
+
quality: nil,
|
|
93
163
|
min_ssim: nil,
|
|
164
|
+
mozjpeg_trellis: true,
|
|
94
165
|
progressive: false,
|
|
95
166
|
drop_alpha: nil,
|
|
167
|
+
exact_size: false,
|
|
96
168
|
execution: nil,
|
|
97
169
|
cancellable: false)
|
|
170
|
+
validate_pixel_buffer!(buffer)
|
|
98
171
|
validate_algo!(algo)
|
|
99
172
|
validate_min_ssim!(min_ssim)
|
|
100
|
-
|
|
173
|
+
validate_boolean!(:mozjpeg_trellis, mozjpeg_trellis)
|
|
174
|
+
validate_boolean!(:progressive, progressive)
|
|
175
|
+
validate_drop_alpha!(drop_alpha)
|
|
176
|
+
validate_boolean!(:exact_size, exact_size)
|
|
177
|
+
validate_boolean!(:cancellable, cancellable)
|
|
178
|
+
quality_was_given = !quality.nil?
|
|
179
|
+
effective_quality = quality_was_given ? quality : DEFAULT_QUALITY
|
|
180
|
+
effective_quality = 1 if min_ssim && !quality_was_given
|
|
181
|
+
validate_quality!(effective_quality)
|
|
101
182
|
validate_dimensions!(width, height, channels)
|
|
102
183
|
execution ||= configuration.execution
|
|
103
184
|
validate_execution!(execution)
|
|
185
|
+
validate_execution_supported!(execution)
|
|
104
186
|
validate_cancellable!(algo, execution, cancellable)
|
|
105
187
|
|
|
106
|
-
if channels
|
|
188
|
+
if channels == 4
|
|
107
189
|
case drop_alpha
|
|
108
190
|
when nil
|
|
109
191
|
warn "ImagePack.compress_pixels: RGBA input has its alpha channel " \
|
|
@@ -118,30 +200,18 @@ module ImagePack
|
|
|
118
200
|
normalized_output_kind = output_kind!(output)
|
|
119
201
|
has_scheduler = fiber_scheduler_active?
|
|
120
202
|
|
|
121
|
-
if min_ssim
|
|
122
|
-
|
|
123
|
-
width.to_i, height.to_i, channels.to_i,
|
|
124
|
-
nil, :return_string,
|
|
125
|
-
ALGO_TO_NATIVE.fetch(algo), 95,
|
|
126
|
-
progressive ? 1 : 0,
|
|
127
|
-
:direct,
|
|
128
|
-
0,
|
|
129
|
-
0)
|
|
130
|
-
return compress(seed_jpeg,
|
|
131
|
-
output: output,
|
|
132
|
-
algo: algo,
|
|
133
|
-
quality: quality,
|
|
134
|
-
min_ssim: min_ssim,
|
|
135
|
-
progressive: progressive,
|
|
136
|
-
execution: execution,
|
|
137
|
-
cancellable: cancellable)
|
|
203
|
+
if min_ssim && channels == 4
|
|
204
|
+
raise UnsupportedError, "min_ssim is not supported for RGBA input"
|
|
138
205
|
end
|
|
139
206
|
|
|
140
207
|
__compress_pixels(buffer,
|
|
141
|
-
width
|
|
208
|
+
width, height, channels,
|
|
142
209
|
output, normalized_output_kind,
|
|
143
|
-
ALGO_TO_NATIVE.fetch(algo),
|
|
210
|
+
ALGO_TO_NATIVE.fetch(algo), effective_quality,
|
|
211
|
+
min_ssim ? min_ssim.to_f : 0.0,
|
|
212
|
+
mozjpeg_trellis ? 1 : 0,
|
|
144
213
|
progressive ? 1 : 0,
|
|
214
|
+
exact_size ? 1 : 0,
|
|
145
215
|
execution,
|
|
146
216
|
cancellable ? 1 : 0,
|
|
147
217
|
has_scheduler ? 1 : 0)
|
|
@@ -161,7 +231,6 @@ module ImagePack
|
|
|
161
231
|
elsif input.bytesize < 4096 && !input.include?("\0") && File.file?(input)
|
|
162
232
|
:path
|
|
163
233
|
else
|
|
164
|
-
input.force_encoding(Encoding::ASCII_8BIT) unless input.frozen?
|
|
165
234
|
:bytes
|
|
166
235
|
end
|
|
167
236
|
when Pathname
|
|
@@ -182,7 +251,7 @@ module ImagePack
|
|
|
182
251
|
return :return_string if output.nil?
|
|
183
252
|
return :path if output.is_a?(String) || output.is_a?(Pathname)
|
|
184
253
|
|
|
185
|
-
raise InvalidArgumentError, "output must be nil, String path, or Pathname in v0.2.
|
|
254
|
+
raise InvalidArgumentError, "output must be nil, String path, or Pathname in v0.2.2"
|
|
186
255
|
end
|
|
187
256
|
|
|
188
257
|
def validate_algo!(algo)
|
|
@@ -204,11 +273,16 @@ module ImagePack
|
|
|
204
273
|
raise InvalidArgumentError, "min_ssim must be Numeric > 0.0 and <= 1.0, got: #{min_ssim.inspect}"
|
|
205
274
|
end
|
|
206
275
|
|
|
207
|
-
|
|
208
|
-
def validate_mozjpeg_trellis!(value)
|
|
276
|
+
def validate_boolean!(name, value)
|
|
209
277
|
return if value == true || value == false
|
|
210
278
|
|
|
211
|
-
raise InvalidArgumentError, "
|
|
279
|
+
raise InvalidArgumentError, "#{name} must be true or false, got: #{value.inspect}"
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def validate_drop_alpha!(value)
|
|
283
|
+
return if value.nil? || value == true || value == false
|
|
284
|
+
|
|
285
|
+
raise InvalidArgumentError, "drop_alpha must be true, false, or nil, got: #{value.inspect}"
|
|
212
286
|
end
|
|
213
287
|
|
|
214
288
|
def validate_execution!(execution)
|
|
@@ -217,20 +291,29 @@ module ImagePack
|
|
|
217
291
|
raise InvalidArgumentError, "execution must be one of #{EXECUTION_MODES}, got: #{execution.inspect}"
|
|
218
292
|
end
|
|
219
293
|
|
|
294
|
+
def validate_execution_supported!(execution)
|
|
295
|
+
return unless execution == :offload
|
|
296
|
+
return if offload_safe?
|
|
297
|
+
|
|
298
|
+
raise UnsupportedError,
|
|
299
|
+
"execution: :offload requires Ruby >= 3.4.0; use execution: :nogvl or :auto"
|
|
300
|
+
end
|
|
301
|
+
|
|
220
302
|
def validate_dimensions!(width, height, channels)
|
|
221
|
-
raise InvalidArgumentError, "width must be > 0" unless width.is_a?(Integer) && width.positive?
|
|
222
|
-
raise InvalidArgumentError, "height must be > 0" unless height.is_a?(Integer) && height.positive?
|
|
303
|
+
raise InvalidArgumentError, "width must be Integer > 0" unless width.is_a?(Integer) && width.positive?
|
|
304
|
+
raise InvalidArgumentError, "height must be Integer > 0" unless height.is_a?(Integer) && height.positive?
|
|
223
305
|
raise InvalidArgumentError, "channels must be 1, 3 or 4" unless [1, 3, 4].include?(channels)
|
|
224
306
|
end
|
|
225
307
|
|
|
226
|
-
def
|
|
227
|
-
return
|
|
308
|
+
def validate_pixel_buffer!(buffer)
|
|
309
|
+
return if buffer.is_a?(String)
|
|
310
|
+
return if defined?(IO::Buffer) && buffer.is_a?(IO::Buffer)
|
|
228
311
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"cancellable: true is only supported with algo: :mozjpeg in v0.2.0"
|
|
232
|
-
end
|
|
312
|
+
raise InvalidArgumentError, "pixel buffer must be a String or IO::Buffer"
|
|
313
|
+
end
|
|
233
314
|
|
|
315
|
+
def validate_cancellable!(_algo, execution, cancellable)
|
|
316
|
+
return unless cancellable
|
|
234
317
|
return unless execution == :direct
|
|
235
318
|
|
|
236
319
|
raise InvalidArgumentError,
|
|
@@ -238,7 +321,7 @@ module ImagePack
|
|
|
238
321
|
end
|
|
239
322
|
|
|
240
323
|
def fiber_scheduler_active?
|
|
241
|
-
Fiber.respond_to?(:scheduler) && !Fiber.scheduler.nil?
|
|
324
|
+
offload_safe? && Fiber.respond_to?(:scheduler) && !Fiber.scheduler.nil?
|
|
242
325
|
end
|
|
243
326
|
end
|
|
244
327
|
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.3
|
|
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
|
|
@@ -80,8 +81,8 @@ dependencies:
|
|
|
80
81
|
- !ruby/object:Gem::Version
|
|
81
82
|
version: '2.21'
|
|
82
83
|
description: Single API, vendored pure-C MozJPEG/libjpeg codec, no tempfiles, Ruby
|
|
83
|
-
3.4 Fiber::Scheduler-aware
|
|
84
|
-
libjpeg, git, or CMake required.
|
|
84
|
+
3.1+ native JPEG execution; Ruby 3.4+ enables Fiber::Scheduler-aware offload. Ships
|
|
85
|
+
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,32 +324,17 @@ 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
|
-
- lib/image_pack/backend.rb
|
|
406
338
|
- lib/image_pack/configuration.rb
|
|
407
339
|
- lib/image_pack/errors.rb
|
|
408
340
|
- lib/image_pack/version.rb
|
|
@@ -413,6 +345,7 @@ metadata:
|
|
|
413
345
|
homepage_uri: https://github.com/roman-haidarov/image_pack
|
|
414
346
|
source_code_uri: https://github.com/roman-haidarov/image_pack
|
|
415
347
|
changelog_uri: https://github.com/roman-haidarov/image_pack/blob/main/CHANGELOG.md
|
|
348
|
+
post_install_message:
|
|
416
349
|
rdoc_options: []
|
|
417
350
|
require_paths:
|
|
418
351
|
- lib
|
|
@@ -420,14 +353,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
420
353
|
requirements:
|
|
421
354
|
- - ">="
|
|
422
355
|
- !ruby/object:Gem::Version
|
|
423
|
-
version: 3.
|
|
356
|
+
version: 3.1.0
|
|
424
357
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
425
358
|
requirements:
|
|
426
359
|
- - ">="
|
|
427
360
|
- !ruby/object:Gem::Version
|
|
428
361
|
version: '0'
|
|
429
362
|
requirements: []
|
|
430
|
-
rubygems_version: 3.
|
|
363
|
+
rubygems_version: 3.3.27
|
|
364
|
+
signing_key:
|
|
431
365
|
specification_version: 4
|
|
432
366
|
summary: 'Ruby-native pure-C JPEG runtime: MozJPEG/libjpeg'
|
|
433
367
|
test_files: []
|