easyimg_utils 0.4.2 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe594098cdc2268dc048152629e5a0481dc834829ca04fa80a9e37c24f52083c
4
- data.tar.gz: ca30a483fad43ea836b7684cf76629e21f0ea0463517a50a4f06188343b69592
3
+ metadata.gz: 747675b404e492bb0c25b254a1e3ec332de6a9d52bd85f32b19849388e579b34
4
+ data.tar.gz: eabc7fd2465441173854d524071d38d295eb390d9b1fe8b0032c93aaec67095e
5
5
  SHA512:
6
- metadata.gz: 5801d345fafb31662b4632ec1729643e232bf0dc66397fe9fc863855b3d6a42dd8f7f9bd13a6c47f2eee7ea70d4104839af5858f3d447cdccfc18df55f5c0e4b
7
- data.tar.gz: 18916137f05c3adc244d2b13a04d350863c6fc837569a059ded6c5b50a6bea0e3f31751979c4bbccc87bfaeaaaf103c212d158445def11233a75f05963e0298c
6
+ metadata.gz: 8c02de630ce978236b4e8461be3f980f85960447579961db87f2e74b85304f9861def010c03e42d9049e759cf9ad752a40d58c6fa40ca1f8f701f92a57a8bb8f
7
+ data.tar.gz: 856e1609c06583611f9a5cb98e31de21395b8d67586cf20f6439fe9ed603849f3a3808c5d0bf4e9d8f7f0ebd3396fddbc93598d97e26562cd111c3efe96d7f95
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -3,9 +3,10 @@
3
3
  # file: easyimg_utils.rb
4
4
 
5
5
  require 'c32'
6
- require 'rxfhelper'
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
- img = read()
89
- gc = Magick::Draw.new
90
- gc.stroke('green')
91
- gc.stroke_width(5)
92
- gc.fill('transparent')
93
- gc.rectangle(x1, y1, x2, y2)
94
- gc.draw(img)
95
- write img, quality
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
- img = read()
120
+ read() do |img|
116
121
 
117
- d = Draw.new
118
- img.annotate(d, 0,0,0,0, s) do
119
- d.gravity = Magick::SouthGravity
120
- d.pointsize = 26
121
- d.stroke = '#000000'
122
- d.fill = '#ffffff'
123
- d.font_weight = Magick::BoldWeight
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
- img = read()
135
- region = img.dispatch(x, y, width, height, 'RGB')
136
- face_img = Magick::Image.constitute(width, height, "RGB", region)
137
- img.composite!(face_img.gaussian_blur(0, strength), x, y,
138
- Magick::OverCompositeOp)
139
- write img, quality
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
- img = read()
145
- img2 = imglevel(-Magick::QuantumRange * 0.25, Magick::QuantumRange * 1.25, 1.0)
146
- write img2, quality
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
- img = read()
166
- img.crop!(CenterGravity, width, height)
167
- write img, quality
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
- img = read()
199
+ read() do |img|
176
200
 
177
- imgx = Magick::ImageList.new(filex)
201
+ imgx = Magick::ImageList.new(filex)
178
202
 
179
- # Change the white pixels in the sign to transparent.
180
- imgx = imgx.matte_replace(0,0)
203
+ # Change the white pixels in the sign to transparent.
204
+ imgx = imgx.matte_replace(0,0)
181
205
 
182
- img2 = Magick::Draw.new
183
- img2.composite(x, y, 0, 0, imgx)
184
- img2.draw(img)
185
-
186
- write img, quality
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
- img ||= read()
227
+ read() do |img|
203
228
 
204
- n = neutral - level
205
- sharpen = n > 0
206
- n.abs.times { img = img.contrast(sharpen) }
207
-
208
- write img, quality
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
- img = read()
244
- img.crop!(x,y, width=w, height=h)
245
- write img, quality
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
- img = read()
252
-
253
- # Use a threshold of 55% of MaxRGB.
254
- img = img.threshold(Magick::MaxRGB*threshold)
278
+ read() do |img|
255
279
 
256
- write img, quality
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
- img = read()
263
- img2 = img.quantize(256, GRAYColorspace)
264
- write img2, quality
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
- img = read()
285
- img2 = img.thumbnail(width, height)
286
- write img2, quality
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
- preview = read()
326
+ read() do |preview|
297
327
 
298
- preview.change_geometry!(geometry) do |cols, rows, img|
299
- img.resize!(cols, rows)
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
- img = read()
309
- img2 = img.rotate(degrees.to_i)
310
- write img2, quality
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
- img = read()
317
- img2 = img.rotate(180)
318
- write img2, quality
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
- img = read()
325
- img2 = img.rotate(-45)
326
- write img2, quality
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
- img = read()
333
- img2 = img.rotate(45)
334
- write img2, quality
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
- img = read()
407
+ read() do |img|
342
408
 
343
- # Convert to grayscale
344
- sketch = img.quantize(256, Magick::GRAYColorspace)
409
+ # Convert to grayscale
410
+ sketch = img.quantize(256, Magick::GRAYColorspace)
345
411
 
346
- # Apply histogram equalization
347
- sketch = sketch.equalize
412
+ # Apply histogram equalization
413
+ sketch = sketch.equalize
348
414
 
349
- sketch = sketch.sketch(0, 10, 135)
350
- img = img.dissolve(sketch, 0.75, 0.25)
415
+ sketch = sketch.sketch(0, 10, 135)
416
+ img = img.dissolve(sketch, 0.75, 0.25)
351
417
 
352
- write img, quality
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
- img = read()
369
- img2 = img.vignette
370
-
371
- write img2, quality
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
- data, type = RXFHelper.read(file)
381
- Magick::Image.from_blob(data).first
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 =~ /^dfs:/ then
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(@file_out))
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, @file_out
505
+ FileX.cp outfile, file_out
408
506
 
409
507
  else
410
508
 
411
- img.write @file_out do
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.2
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
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwNTA1MjEzODIwWhcN
15
- MjAwNTA0MjEzODIwWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDlJOU1
17
- WxngJclmOIuKurVqnGO5ngYusS8HkdA+Cz5iaEkcECQ316FsTZI87o2cRi0XV6cI
18
- CwzqZJi2LSZYDpu5H2tOCYgmmuQxSRwQm74TLdBnuy5gT3wu5fQuK1jLMbfmKwTs
19
- RXqNk5TOzD+xKkF2YJqKXuxx0/U/HGE5hAMYL5jI11NGO8HQCKyFzW9wM1aDmjwd
20
- q3AXnVAC/xk5ETmabDpTe6hlfgEQK8E8JUhLVcojUopcQsp/miJwZkleNpNnPJtB
21
- 6nQOaQmIzQ6mvdy6gEabwSk8A0m2OpnkWkg7XAtLbNMugsoY3CrDExMdK5730faa
22
- Q7cx1KkjvaMNxm1qudlpC0ekGv4sHH3P10Lbp3a9XSXQTiZ7dpDUgAt/55mLR2Vn
23
- G097DVu8IstolD/XF1NF8x+Kr0DOC14CeRtqKx64sym/qyl5U4tBJm+cJYRgN4/9
24
- awoHZTBRMiU0Q/WB37EEKGvfoo6qkPJeaFayrNH9szChDjTboGPHNEHOPDcCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUJcLC8vho
26
- CMcWFSEMVQrIlWvwppowJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
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
- BgkqhkiG9w0BAQsFAAOCAYEANTImQJnRvlqQBDXU1ok4iqW2TFRQMTixEP/zCXDd
29
- IyUz2nwaKvyiTvIVyXpdTWg2UatEvHwaJrFW0Hpghu2f7rYuRvwKpSrPFelEVYJf
30
- wyjtqZIiZfQePXjAc9rdmXzbDY7zTHQedMUcaIFocntclpefGGyFg1m7IKXlcrAK
31
- BEAaygcKB1S6NhHGm4TfRmdEqPN1sY3COMWjv49rkmQBDcz4KIDxHUa33vHieFq5
32
- F+hKSRa1747fYLZc42bpTQBvHR2ZuXRGCY1iNCipXoncu7ZY6wPYvO2HTGDGK9Uk
33
- ByawN6V7m2htGNb+q3zLFgLFP91/+60zBdLc7DfYNEiHXajhJsLKWpcSosC3AUaa
34
- 4IpXr6ATiPj+a8ktF/jAwrpUTFr3qpGa0qW/XVD3o35biL2+3gs6hTqPo3IQYusR
35
- 6PB/a3YCkvA1ipebq/pmmvF9VopoG5giimE7Rkw0QPUi/w6724YH6tVQj077N2mP
36
- WOpXPMFUK6eXTvN8BbxLtUkt
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: 2019-08-18 00:00:00.000000000 Z
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.0'
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.0'
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.9.4
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.9.4
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.1
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