easyimg_utils 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/easyimg_utils.rb +63 -1
- metadata +1 -1
- 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: c09e7c063bbd8a5c1060c74338346317b3432f46e53a0e3cdc6e0d4a64553520
|
4
|
+
data.tar.gz: 8d73c424b106e51dea74394557e601b8ea78bfca66fd43bf80a10088527ba726
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 602af329751d96be2d89a4b6487d35d9c1920a4e56fb8d5330014e8e924b0edb44db1f74bd926224bcf3ee62435cba1b3b209ccea1f2301b0618a299534702b9
|
7
|
+
data.tar.gz: abd50555f42ad809647180e58325578951b653f545fc7411c8b58e3132625ff90e82666509d1933ecf75d48409437b27dad9718fa60a4183c4d0174bc85e0fa5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/easyimg_utils.rb
CHANGED
@@ -57,6 +57,7 @@ class EasyImgUtils
|
|
57
57
|
* add_svg # adds an SVG transparency overlay. usage: add_svg('/tmp/image1.svg')
|
58
58
|
* add_text # e.g. add_text('some text')
|
59
59
|
* animate Creates an animated gif e.g. animate('/tmp/a%d.png', '/tmp/b.gif')
|
60
|
+
* best_viewport # returns the best viewing region on the y-axis
|
60
61
|
* blur # e.g. blur(x: 231, y: 123, w: 85, h: 85)
|
61
62
|
* capture_screen # takes a screenshot of the desktop
|
62
63
|
* calc_resize # e.g. calc_resize '640x480' #=> 640x491
|
@@ -175,6 +176,41 @@ class EasyImgUtils
|
|
175
176
|
|
176
177
|
end
|
177
178
|
|
179
|
+
# Used where images are perhaps cropped using CSS to a letterbox size image.
|
180
|
+
# Works best with portrait mode photos of selfies or natural
|
181
|
+
# landscapes with a lot of sky
|
182
|
+
#
|
183
|
+
# Returns the starting y pos as a percentage of the image using face
|
184
|
+
# detection and high contrast detection on the y-axis
|
185
|
+
#
|
186
|
+
def best_viewport()
|
187
|
+
|
188
|
+
percentage = 0
|
189
|
+
|
190
|
+
read() do |img|
|
191
|
+
|
192
|
+
found = faces()
|
193
|
+
|
194
|
+
index = if found.any? then
|
195
|
+
|
196
|
+
# find the top y
|
197
|
+
box = found.max_by {|x, y, width, height| y}
|
198
|
+
box[1]
|
199
|
+
|
200
|
+
else
|
201
|
+
|
202
|
+
y_maxcontrast(img)
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
percentage = (100 / (img.rows / index.to_f)).round
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
return percentage
|
211
|
+
|
212
|
+
end
|
213
|
+
|
178
214
|
def blur(x: 0, y: 0, w: 80, h: 80, strength: 8, quality: nil)
|
179
215
|
|
180
216
|
width, height = w, h
|
@@ -483,7 +519,7 @@ class EasyImgUtils
|
|
483
519
|
|
484
520
|
end
|
485
521
|
|
486
|
-
alias feathered_around vignette
|
522
|
+
alias feathered_around vignette
|
487
523
|
|
488
524
|
private
|
489
525
|
|
@@ -553,5 +589,31 @@ class EasyImgUtils
|
|
553
589
|
|
554
590
|
end
|
555
591
|
end
|
592
|
+
|
593
|
+
# returns the y index of the pixel containing the most contrast using the
|
594
|
+
# y-axis center of the image
|
595
|
+
#
|
596
|
+
def y_maxcontrast(img)
|
597
|
+
|
598
|
+
rows, cols = img.rows, img.columns
|
599
|
+
center = (cols / 2).round
|
600
|
+
pixels = img.get_pixels(center,0,1,rows)
|
601
|
+
|
602
|
+
rgb = []
|
603
|
+
px = pixels[0]
|
604
|
+
rgb = [px.red, px.green, px.blue].map { |v| 255*(v/65535.0) }
|
556
605
|
|
606
|
+
a = pixels[1..-1].map do |pixel,i|
|
607
|
+
|
608
|
+
c = [pixel.red, pixel.green, pixel.blue].map { |v| 255*(v/65535.0) }
|
609
|
+
rgb[0] - c[0]
|
610
|
+
rgb.map.with_index {|x,i| (x - c[i]).abs.to_i}
|
611
|
+
|
612
|
+
end
|
613
|
+
|
614
|
+
a2 = a.map(&:sum)
|
615
|
+
a2.index(a2.max) + 1
|
616
|
+
|
617
|
+
end
|
618
|
+
|
557
619
|
end
|
metadata
CHANGED
metadata.gz.sig
CHANGED
Binary file
|