easyimg_utils 0.6.2 → 0.7.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 747675b404e492bb0c25b254a1e3ec332de6a9d52bd85f32b19849388e579b34
4
- data.tar.gz: eabc7fd2465441173854d524071d38d295eb390d9b1fe8b0032c93aaec67095e
3
+ metadata.gz: 1770c2dc6e430a4cbb3af042379344927227ea4a2e7ae8aabd57be362c956ea5
4
+ data.tar.gz: b53d0b56ee4c884edecfae57500ec8ff41a927e7dd172d144108787c895d5d51
5
5
  SHA512:
6
- metadata.gz: 8c02de630ce978236b4e8461be3f980f85960447579961db87f2e74b85304f9861def010c03e42d9049e759cf9ad752a40d58c6fa40ca1f8f701f92a57a8bb8f
7
- data.tar.gz: 856e1609c06583611f9a5cb98e31de21395b8d67586cf20f6439fe9ed603849f3a3808c5d0bf4e9d8f7f0ebd3396fddbc93598d97e26562cd111c3efe96d7f95
6
+ metadata.gz: e8a5e8046f81af69d57dd8b6b53c242d7378a37892c4a960115577746e22928614d7d53c32cff9947ffaa1825fde3808b9d7f0180acb8b56f6fc7e98a61dabd2
7
+ data.tar.gz: 65dd367226a621b13179ce3d58bc228e9c6afdde398c13d95b33c2e6751ecbb224fee977959d5568c45d7dfaece13cb51b4d131d702b1cba4df7ec69e04b4fa4
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/easyimg_utils.rb CHANGED
@@ -7,6 +7,7 @@ require 'x4ss'
7
7
  require 'rmagick'
8
8
  require 'webp_ffi'
9
9
  require 'rxfhelper'
10
+ require 'detectfaces'
10
11
 
11
12
  # requirements:
12
13
  #
@@ -19,6 +20,8 @@ require 'rxfhelper'
19
20
  # webp-ffi dependencies
20
21
  # apt-get install libjpeg-dev libpng-dev libtiff-dev libwebp-dev
21
22
  #
23
+ # detectfaces dependencies
24
+ # apt-get install libopencv-dev
22
25
 
23
26
 
24
27
 
@@ -47,6 +50,7 @@ class EasyImgUtils
47
50
  extend CommandHelper
48
51
  include Magick
49
52
  include RXFHelperModule
53
+
50
54
 
51
55
  @commands = "
52
56
  * add rectangle # usage: add_rectangle(color: 'green', x1: 12, y1: 12, x2: 24, y2: 24)
@@ -55,12 +59,14 @@ class EasyImgUtils
55
59
  * animate Creates an animated gif e.g. animate('/tmp/a%d.png', '/tmp/b.gif')
56
60
  * blur # e.g. blur(x: 231, y: 123, w: 85, h: 85)
57
61
  * capture_screen # takes a screenshot of the desktop
62
+ * calc_resize # e.g. calc_resize '640x480' #=> 640x491
58
63
  * center_crop # crops from the centre of an image. Usage center_crop(width, height)
59
64
  * composite # overlay a smaller image on top of an image
60
65
  * contrast # changes the intensity between lighter and darker elements
61
66
  * convert # convert from 1 img format to another
62
67
  * crop # e.g. crop(x: 231, y: 123, w: 85, h: 85)
63
68
  * fax_effect # Produces a high-contrast, two colour image
69
+ * faces # Returns an array of bounding boxes for detected faces
64
70
  * greyscale # Reduces the image to 256 shades of grey
65
71
  * info # returns the dimension of the image in a Hash object
66
72
  * make_thumbnail # similar to resize but faster for sizes less than 10% of original image
@@ -85,6 +91,29 @@ class EasyImgUtils
85
91
 
86
92
  end
87
93
 
94
+ # e.g. calc_resize '1449x1932', '640x480' #=> 480x640
95
+ # e.g. calc_resize '518x1024', '*518x500' #=> "518x1024"
96
+ # the asterisk denotes a guaranteed the image will be resized using x or y
97
+ #
98
+ def self.calc_resize(geometry, new_geometry, force: false)
99
+
100
+ xy = geometry.split('x',2)
101
+ xy2 = new_geometry.split('x',2)
102
+
103
+ # find any locked geometry which guarantees the resize on either x or y
104
+ lock = xy2.find {|x| x =~ /^\*/}
105
+
106
+ a = xy.map {|x| x[/\d+/].to_i}
107
+ a2 = xy2.map {|x| x[/\d+/].to_i}
108
+
109
+ i = lock ? a2.index(lock[1..-1].to_i) : a.index(a.max)
110
+
111
+ factor = a2[i] / a[i].to_f
112
+
113
+ s3 = a.map {|x| (x * factor).round}.join('x')
114
+
115
+ end
116
+
88
117
  def add_rectangle(a=[], quality: nil, color: 'green', stroke_width: 5,
89
118
  x1: 0, y1: 0, x2: 0, y2: 0)
90
119
 
@@ -169,6 +198,12 @@ class EasyImgUtils
169
198
  end
170
199
  end
171
200
 
201
+ # calculates the new geometry after a resize
202
+ #
203
+ def calc_resize(geometry)
204
+ EasyImgUtils.calc_resize(info()[:geometry], geometry)
205
+ end
206
+
172
207
  def capture_screen(quality: nil)
173
208
 
174
209
  # defaults (silent=false, frame=false, descend=false,
@@ -273,6 +308,10 @@ class EasyImgUtils
273
308
 
274
309
  end
275
310
 
311
+ def faces()
312
+ DetectFaces.new(@file_in).faces
313
+ end
314
+
276
315
  def fax_effect(threshold: 0.55, quality: nil)
277
316
 
278
317
  read() do |img|
@@ -321,8 +360,10 @@ class EasyImgUtils
321
360
 
322
361
  # defines the maximum size of an image while maintaining aspect ratio
323
362
  #
324
- def resize(geometry='320x240', quality: nil)
363
+ def resize(raw_geometry='320x240', quality: nil)
325
364
 
365
+ geometry = calc_resize(raw_geometry
366
+ )
326
367
  read() do |preview|
327
368
 
328
369
  preview.change_geometry!(geometry) do |cols, rows, img|
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.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  KY48n99T12IOioQ4ghCO1L/UAg2taLOcZbMv4WpV1p9bXKhnrow81zeogZjjiNGS
36
36
  OmTAjCfyGFPC/1eXnSV5Smv8
37
37
  -----END CERTIFICATE-----
38
- date: 2020-07-14 00:00:00.000000000 Z
38
+ date: 2021-03-23 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rmagick
@@ -43,60 +43,60 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '4.1'
46
+ version: '4.2'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 4.1.2
49
+ version: 4.2.2
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '4.1'
56
+ version: '4.2'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 4.1.2
59
+ version: 4.2.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: 1.0.0
67
64
  - - "~>"
68
65
  - !ruby/object:Gem::Version
69
- version: '1.0'
66
+ version: '1.1'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.1.3
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: 1.0.0
77
74
  - - "~>"
78
75
  - !ruby/object:Gem::Version
79
- version: '1.0'
76
+ version: '1.1'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.1.3
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: webp-ffi
82
82
  requirement: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
- version: '0.2'
86
+ version: '0.3'
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.2.7
89
+ version: 0.3.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.2'
96
+ version: '0.3'
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 0.2.7
99
+ version: 0.3.1
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: x4ss
102
102
  requirement: !ruby/object:Gem::Requirement
@@ -118,7 +118,7 @@ dependencies:
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0.2'
120
120
  description:
121
- email: james@jamesrobertson.eu
121
+ email: digital.robertson@gmail.com
122
122
  executables: []
123
123
  extensions: []
124
124
  extra_rdoc_files: []
@@ -143,7 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
- rubygems_version: 3.0.3
146
+ rubyforge_project:
147
+ rubygems_version: 2.7.10
147
148
  signing_key:
148
149
  specification_version: 4
149
150
  summary: Makes manipulating images from 1 line of code easier.
metadata.gz.sig CHANGED
Binary file