easyimg_utils 0.4.2 → 0.6.2
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/easyimg_utils.rb +194 -96
- metadata +61 -41
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 747675b404e492bb0c25b254a1e3ec332de6a9d52bd85f32b19849388e579b34
|
4
|
+
data.tar.gz: eabc7fd2465441173854d524071d38d295eb390d9b1fe8b0032c93aaec67095e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c02de630ce978236b4e8461be3f980f85960447579961db87f2e74b85304f9861def010c03e42d9049e759cf9ad752a40d58c6fa40ca1f8f701f92a57a8bb8f
|
7
|
+
data.tar.gz: 856e1609c06583611f9a5cb98e31de21395b8d67586cf20f6439fe9ed603849f3a3808c5d0bf4e9d8f7f0ebd3396fddbc93598d97e26562cd111c3efe96d7f95
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/easyimg_utils.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
# file: easyimg_utils.rb
|
4
4
|
|
5
5
|
require 'c32'
|
6
|
-
require '
|
6
|
+
require 'x4ss'
|
7
7
|
require 'rmagick'
|
8
8
|
require 'webp_ffi'
|
9
|
+
require 'rxfhelper'
|
9
10
|
|
10
11
|
# requirements:
|
11
12
|
#
|
@@ -51,6 +52,7 @@ class EasyImgUtils
|
|
51
52
|
* add rectangle # usage: add_rectangle(color: 'green', x1: 12, y1: 12, x2: 24, y2: 24)
|
52
53
|
* add_svg # adds an SVG transparency overlay. usage: add_svg('/tmp/image1.svg')
|
53
54
|
* add_text # e.g. add_text('some text')
|
55
|
+
* animate Creates an animated gif e.g. animate('/tmp/a%d.png', '/tmp/b.gif')
|
54
56
|
* blur # e.g. blur(x: 231, y: 123, w: 85, h: 85)
|
55
57
|
* capture_screen # takes a screenshot of the desktop
|
56
58
|
* center_crop # crops from the centre of an image. Usage center_crop(width, height)
|
@@ -62,11 +64,13 @@ class EasyImgUtils
|
|
62
64
|
* greyscale # Reduces the image to 256 shades of grey
|
63
65
|
* info # returns the dimension of the image in a Hash object
|
64
66
|
* make_thumbnail # similar to resize but faster for sizes less than 10% of original image
|
65
|
-
* resize # set the maximum geomertry of the image for resizing e.g. resize('320x240')
|
67
|
+
* resize # set the maximum geomertry of the image for resizing e.g. resize('320x240') see also scale
|
66
68
|
* rotate
|
67
69
|
* rotate_180
|
68
70
|
* rotate_left
|
69
71
|
* rotate_right
|
72
|
+
* scale # Scales an image by the given factor e.g. 0.75 is 75%. see also resize
|
73
|
+
* screencast # records a screencast and saves it as animated gif. e.g. (out: '/tmp/fun.gif').screencast
|
70
74
|
* sketch # renders an artistic sketch, ideal with simplistic photos
|
71
75
|
* view # view the output
|
72
76
|
* vignette # Feathers the edge of an image in a circular path
|
@@ -85,14 +89,15 @@ class EasyImgUtils
|
|
85
89
|
x1: 0, y1: 0, x2: 0, y2: 0)
|
86
90
|
|
87
91
|
x1, y1, x2, y2 = *a if a
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
read() do |img|
|
93
|
+
gc = Magick::Draw.new
|
94
|
+
gc.stroke('green')
|
95
|
+
gc.stroke_width(5)
|
96
|
+
gc.fill('transparent')
|
97
|
+
gc.rectangle(x1, y1, x2, y2)
|
98
|
+
gc.draw(img)
|
99
|
+
write img, quality
|
100
|
+
end
|
96
101
|
|
97
102
|
end
|
98
103
|
|
@@ -112,38 +117,56 @@ class EasyImgUtils
|
|
112
117
|
|
113
118
|
def add_text(s='your text goes here', quality: nil)
|
114
119
|
|
115
|
-
|
120
|
+
read() do |img|
|
116
121
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
122
|
+
d = Draw.new
|
123
|
+
img.annotate(d, 0,0,0,0, s) do
|
124
|
+
d.gravity = Magick::SouthGravity
|
125
|
+
d.pointsize = 26
|
126
|
+
d.stroke = '#000000'
|
127
|
+
d.fill = '#ffffff'
|
128
|
+
d.font_weight = Magick::BoldWeight
|
129
|
+
end
|
130
|
+
|
131
|
+
write img, quality
|
132
|
+
|
124
133
|
end
|
125
134
|
|
126
|
-
write img, quality
|
127
|
-
|
128
135
|
end
|
129
136
|
|
137
|
+
def animate()
|
138
|
+
|
139
|
+
anim = Magick::ImageList.new
|
140
|
+
|
141
|
+
read() {|img| anim << img }
|
142
|
+
anim.ticks_per_second = 100
|
143
|
+
anim.delay = 20
|
144
|
+
|
145
|
+
@file_out ? anim.write(@file_out) : anim.animate
|
146
|
+
|
147
|
+
end
|
130
148
|
|
131
149
|
def blur(x: 0, y: 0, w: 80, h: 80, strength: 8, quality: nil)
|
132
150
|
|
133
151
|
width, height = w, h
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
152
|
+
|
153
|
+
read() do |img|
|
154
|
+
|
155
|
+
region = img.dispatch(x, y, width, height, 'RGB')
|
156
|
+
face_img = Magick::Image.constitute(width, height, "RGB", region)
|
157
|
+
img.composite!(face_img.gaussian_blur(0, strength), x, y,
|
158
|
+
Magick::OverCompositeOp)
|
159
|
+
write img, quality
|
160
|
+
|
161
|
+
end
|
140
162
|
|
141
163
|
end
|
142
164
|
|
143
165
|
def brightness(quality: nil)
|
144
|
-
|
145
|
-
|
146
|
-
|
166
|
+
read() do |img|
|
167
|
+
img2 = imglevel(-Magick::QuantumRange * 0.25, Magick::QuantumRange * 1.25, 1.0)
|
168
|
+
write img2, quality
|
169
|
+
end
|
147
170
|
end
|
148
171
|
|
149
172
|
def capture_screen(quality: nil)
|
@@ -162,9 +185,10 @@ class EasyImgUtils
|
|
162
185
|
|
163
186
|
return unless w
|
164
187
|
|
165
|
-
|
166
|
-
|
167
|
-
|
188
|
+
read() do |img|
|
189
|
+
img.crop!(CenterGravity, width, height)
|
190
|
+
write img, quality
|
191
|
+
end
|
168
192
|
|
169
193
|
end
|
170
194
|
|
@@ -172,18 +196,19 @@ class EasyImgUtils
|
|
172
196
|
|
173
197
|
return unless filex
|
174
198
|
|
175
|
-
|
199
|
+
read() do |img|
|
176
200
|
|
177
|
-
|
201
|
+
imgx = Magick::ImageList.new(filex)
|
178
202
|
|
179
|
-
|
180
|
-
|
203
|
+
# Change the white pixels in the sign to transparent.
|
204
|
+
imgx = imgx.matte_replace(0,0)
|
181
205
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
206
|
+
img2 = Magick::Draw.new
|
207
|
+
img2.composite(x, y, 0, 0, imgx)
|
208
|
+
img2.draw(img)
|
209
|
+
|
210
|
+
write img, quality
|
211
|
+
end
|
187
212
|
|
188
213
|
end
|
189
214
|
|
@@ -199,13 +224,14 @@ class EasyImgUtils
|
|
199
224
|
|
200
225
|
return if level == neutral
|
201
226
|
|
202
|
-
|
227
|
+
read() do |img|
|
203
228
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
229
|
+
n = neutral - level
|
230
|
+
sharpen = n > 0
|
231
|
+
n.abs.times { img = img.contrast(sharpen) }
|
232
|
+
|
233
|
+
write img, quality
|
234
|
+
end
|
209
235
|
|
210
236
|
end
|
211
237
|
|
@@ -240,28 +266,31 @@ class EasyImgUtils
|
|
240
266
|
|
241
267
|
return unless w
|
242
268
|
|
243
|
-
|
244
|
-
|
245
|
-
|
269
|
+
read() do |img|
|
270
|
+
img.crop!(x,y, width=w, height=h)
|
271
|
+
write img, quality
|
272
|
+
end
|
246
273
|
|
247
274
|
end
|
248
275
|
|
249
276
|
def fax_effect(threshold: 0.55, quality: nil)
|
250
277
|
|
251
|
-
|
252
|
-
|
253
|
-
# Use a threshold of 55% of MaxRGB.
|
254
|
-
img = img.threshold(Magick::MaxRGB*threshold)
|
278
|
+
read() do |img|
|
255
279
|
|
256
|
-
|
280
|
+
# Use a threshold of 55% of MaxRGB.
|
281
|
+
img = img.threshold(Magick::MaxRGB*threshold)
|
282
|
+
write img, quality
|
283
|
+
|
284
|
+
end
|
257
285
|
|
258
286
|
end
|
259
287
|
|
260
288
|
def greyscale(quality: nil)
|
261
289
|
|
262
|
-
|
263
|
-
|
264
|
-
|
290
|
+
read() do |img|
|
291
|
+
img2 = img.quantize(256, GRAYColorspace)
|
292
|
+
write img2, quality
|
293
|
+
end
|
265
294
|
|
266
295
|
end
|
267
296
|
|
@@ -281,9 +310,10 @@ class EasyImgUtils
|
|
281
310
|
|
282
311
|
def make_thumbnail(width=125, height=125)
|
283
312
|
|
284
|
-
|
285
|
-
|
286
|
-
|
313
|
+
read() do |img|
|
314
|
+
img2 = img.thumbnail(width, height)
|
315
|
+
write img2, quality
|
316
|
+
end
|
287
317
|
|
288
318
|
end
|
289
319
|
|
@@ -293,63 +323,101 @@ class EasyImgUtils
|
|
293
323
|
#
|
294
324
|
def resize(geometry='320x240', quality: nil)
|
295
325
|
|
296
|
-
|
326
|
+
read() do |preview|
|
297
327
|
|
298
|
-
|
299
|
-
|
328
|
+
preview.change_geometry!(geometry) do |cols, rows, img|
|
329
|
+
img.resize!(cols, rows)
|
330
|
+
end
|
331
|
+
|
332
|
+
write preview, quality
|
300
333
|
end
|
301
334
|
|
302
|
-
write preview, quality
|
303
|
-
|
304
335
|
end
|
305
336
|
|
306
337
|
def rotate(degrees)
|
307
338
|
|
308
|
-
|
309
|
-
|
310
|
-
|
339
|
+
read() do |img|
|
340
|
+
img2 = img.rotate(degrees.to_i)
|
341
|
+
write img2, quality
|
342
|
+
end
|
311
343
|
|
312
344
|
end
|
313
345
|
|
314
346
|
def rotate_180()
|
315
347
|
|
316
|
-
|
317
|
-
|
318
|
-
|
348
|
+
read() do |img|
|
349
|
+
img2 = img.rotate(180)
|
350
|
+
write img2, quality
|
351
|
+
end
|
319
352
|
|
320
353
|
end
|
321
354
|
|
322
355
|
def rotate_left()
|
323
356
|
|
324
|
-
|
325
|
-
|
326
|
-
|
357
|
+
read() do |img|
|
358
|
+
img2 = img.rotate(-45)
|
359
|
+
write img2, quality
|
360
|
+
end
|
327
361
|
|
328
362
|
end
|
329
363
|
|
330
364
|
def rotate_right()
|
331
365
|
|
332
|
-
|
333
|
-
|
334
|
-
|
366
|
+
read() do |img|
|
367
|
+
img2 = img.rotate(45)
|
368
|
+
write img2, quality
|
369
|
+
end
|
335
370
|
|
336
371
|
end
|
372
|
+
|
373
|
+
# Scales an image by the given factor e.g. 0.75 is 75%
|
374
|
+
#
|
375
|
+
def scale(factor=0.75, quality: nil)
|
376
|
+
|
377
|
+
read() do |img|
|
378
|
+
|
379
|
+
img2 = img.scale(factor)
|
380
|
+
write img2, quality
|
381
|
+
|
382
|
+
end
|
383
|
+
|
384
|
+
end
|
385
|
+
|
386
|
+
# Takes a screenshot every second to create an animated gif
|
387
|
+
#
|
388
|
+
def screencast(duration: 6, scale: 1, window: true)
|
389
|
+
|
390
|
+
fileout = @file_out.sub(/\.\w+$/,'%d.png')
|
391
|
+
|
392
|
+
puts 'fileout: ' + fileout if @debug
|
393
|
+
|
394
|
+
x4ss = X4ss.new fileout, mouse: true, window: true
|
395
|
+
mode = window ? :window : :screen
|
396
|
+
sleep 2; x4ss.record duration: duration, mode: mode
|
397
|
+
x4ss.save
|
398
|
+
|
399
|
+
fileout2 = fileout.sub(/(?=%)/,'b')
|
400
|
+
EasyImgUtils.new(fileout, fileout2).scale(scale) unless scale == 1
|
401
|
+
EasyImgUtils.new(fileout2, @file_out).animate
|
337
402
|
|
403
|
+
end
|
338
404
|
|
339
405
|
def sketch(quality: nil)
|
340
406
|
|
341
|
-
|
407
|
+
read() do |img|
|
342
408
|
|
343
|
-
|
344
|
-
|
409
|
+
# Convert to grayscale
|
410
|
+
sketch = img.quantize(256, Magick::GRAYColorspace)
|
345
411
|
|
346
|
-
|
347
|
-
|
412
|
+
# Apply histogram equalization
|
413
|
+
sketch = sketch.equalize
|
348
414
|
|
349
|
-
|
350
|
-
|
415
|
+
sketch = sketch.sketch(0, 10, 135)
|
416
|
+
img = img.dissolve(sketch, 0.75, 0.25)
|
351
417
|
|
352
|
-
|
418
|
+
write img, quality
|
419
|
+
|
420
|
+
end
|
353
421
|
|
354
422
|
end
|
355
423
|
|
@@ -365,10 +433,12 @@ class EasyImgUtils
|
|
365
433
|
|
366
434
|
def vignette(quality: nil)
|
367
435
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
436
|
+
read() do |img|
|
437
|
+
|
438
|
+
img2 = img.vignette
|
439
|
+
write img2, quality
|
440
|
+
|
441
|
+
end
|
372
442
|
|
373
443
|
end
|
374
444
|
|
@@ -377,8 +447,28 @@ class EasyImgUtils
|
|
377
447
|
private
|
378
448
|
|
379
449
|
def read(file=@file_in)
|
380
|
-
|
381
|
-
|
450
|
+
|
451
|
+
files = if file =~ /%d/ then
|
452
|
+
|
453
|
+
regfilepath = file.sub('%d','(\d+)')
|
454
|
+
globfilepath = file.sub('%d','*')
|
455
|
+
|
456
|
+
a = Dir[globfilepath]
|
457
|
+
puts 'a: ' + a.inspect if @debug
|
458
|
+
a.sort_by {|x| Regexp.new(regfilepath).match(x).captures[0].to_i }
|
459
|
+
|
460
|
+
else
|
461
|
+
[file]
|
462
|
+
end
|
463
|
+
|
464
|
+
files.each do |filex|
|
465
|
+
|
466
|
+
@filex_in = filex
|
467
|
+
data, type = RXFHelper.read(filex)
|
468
|
+
yield(Magick::Image.from_blob(data).first)
|
469
|
+
|
470
|
+
end
|
471
|
+
|
382
472
|
end
|
383
473
|
|
384
474
|
def run(command, show=false)
|
@@ -396,19 +486,27 @@ class EasyImgUtils
|
|
396
486
|
|
397
487
|
return img.to_blob unless @file_out
|
398
488
|
|
399
|
-
if @file_out =~
|
489
|
+
file_out = if @file_out =~ /%d/ then
|
490
|
+
regpath = @file_in.sub('%d','(\d+)')
|
491
|
+
n = @filex_in[/#{regpath}/,1]
|
492
|
+
@file_out.sub('%d',n)
|
493
|
+
else
|
494
|
+
@file_out
|
495
|
+
end
|
496
|
+
|
497
|
+
if file_out =~ /^dfs:/ then
|
400
498
|
|
401
|
-
outfile = File.join(@working_dir, File.basename(
|
499
|
+
outfile = File.join(@working_dir, File.basename(file_out))
|
402
500
|
|
403
501
|
img.write outfile do
|
404
502
|
self.quality = quality.to_i if quality
|
405
503
|
end
|
406
504
|
|
407
|
-
FileX.cp outfile,
|
505
|
+
FileX.cp outfile, file_out
|
408
506
|
|
409
507
|
else
|
410
508
|
|
411
|
-
img.write
|
509
|
+
img.write file_out do
|
412
510
|
self.quality = quality.to_i if quality
|
413
511
|
end
|
414
512
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easyimg_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -11,72 +11,72 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwNTEyMTExNzA0WhcN
|
15
|
+
MjEwNTEyMTExNzA0WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDNnJ8h
|
17
|
+
QqFXanzUVukVQF0zYimaY+FQLO5mLMKP+PTh2NDWd+UOzngC+3OH5unRId46Pzge
|
18
|
+
bUNkK1jTeaMiyqNeubkZqHhIh0u/QzSVihhsn5DLmb5nukbe755VuoG8ISLMWYno
|
19
|
+
2LCLOfPQTtcU/LmMBGMBkKzjQaA/U2BpM3Ao5dKlgyYzxkh9UUGXQzuQc2vp0Msp
|
20
|
+
rYOhNSz4CtVex2l3TQiBL7Hw+7dh9PPwon0BLXGnfJnJz8wT/09RLgZjJ2z/Ye/w
|
21
|
+
uMWZTE5LswUsP0EqRkRPft0UsjROu4bgAcxY9SXiv2jXCoENQugCJ82/vsjYNs6p
|
22
|
+
d7PXBY7OHBao74Ywc4vjiSjLe91ZpKwNwQVFt0yCpV6Gby0ZYcAeHVM3SuYiKrd3
|
23
|
+
IJ78q18pR4Oroih1soCyaAozDiax+kPxvtx3s5Rw9P+4LvxjTbMY5dCRGBUSW4s8
|
24
|
+
VKv1W1xo1T5ucixalTuGoaEmINv6LI0ZYzyOX6/wdv+s2MgJMOifMO5YnV0CAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUswJyQrQH
|
26
|
+
BRQmet2GwVJgUkxLihUwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
27
|
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEASbXQwXltNOD+/xy+a6FcP6RHDLdUXWVii2QZkwR8
|
29
|
+
n9+EXLWH9/pTS1vICTLz3cqwV9J3o+JdwsRFHMGMHFOFwoItWNYC74J2bmR7q4O8
|
30
|
+
R22guVDNqYotvSUacFDH/aT/702nEkTyXnGhjA/QsrEgUnVzjYY36WYJKK3YUFjD
|
31
|
+
1UL68GiuaphHNHIYOe/aL2lfI3r30Z0KJ5xLuvJtTtNay/HsBlBavdspUKuBDiMG
|
32
|
+
tbTr7XPHZLKpyZCy3JHrNCNmHnkypk2fCgUuz6lMTO5K9lXyXJjMFnim2Wdmpia2
|
33
|
+
BJD+IXi6klFyzJLkQyJGcHP6jCodoiV5HWWU0KDSnQMyNs8HmmBr63RshdHWFHoE
|
34
|
+
o5mCr4o4SP5vu6sUUDmtMbf9d0XtJ46j3qxdRFYvBrLiVbD5MP4v+vSPv2TkMMZE
|
35
|
+
KY48n99T12IOioQ4ghCO1L/UAg2taLOcZbMv4WpV1p9bXKhnrow81zeogZjjiNGS
|
36
|
+
OmTAjCfyGFPC/1eXnSV5Smv8
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rmagick
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 4.0.0
|
47
44
|
- - "~>"
|
48
45
|
- !ruby/object:Gem::Version
|
49
|
-
version: '4.
|
46
|
+
version: '4.1'
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 4.1.2
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 4.0.0
|
57
54
|
- - "~>"
|
58
55
|
- !ruby/object:Gem::Version
|
59
|
-
version: '4.
|
56
|
+
version: '4.1'
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 4.1.2
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rxfhelper
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '0.9'
|
67
64
|
- - ">="
|
68
65
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
66
|
+
version: 1.0.0
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "~>"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0.9'
|
77
74
|
- - ">="
|
78
75
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
76
|
+
version: 1.0.0
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1.0'
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: webp-ffi
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +97,26 @@ dependencies:
|
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 0.2.7
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: x4ss
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 0.2.0
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.2'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.2.0
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.2'
|
100
120
|
description:
|
101
121
|
email: james@jamesrobertson.eu
|
102
122
|
executables: []
|
@@ -123,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
143
|
- !ruby/object:Gem::Version
|
124
144
|
version: '0'
|
125
145
|
requirements: []
|
126
|
-
rubygems_version: 3.0.
|
146
|
+
rubygems_version: 3.0.3
|
127
147
|
signing_key:
|
128
148
|
specification_version: 4
|
129
149
|
summary: Makes manipulating images from 1 line of code easier.
|
metadata.gz.sig
CHANGED
Binary file
|