photo-cook 1.0.1 → 1.0.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
- data/Gemfile.lock +2 -2
- data/lib/photo-cook/resizer.rb +50 -31
- data/lib/photo-cook/version.rb +1 -1
- data/lib/photo-cook.rb +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6e15cd4a81a3e2b2873faca2e0c1bc33788b230d
|
|
4
|
+
data.tar.gz: 96578e33f51efdf6b2300f3db3d5d815713883c9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6b14c7e899302a98bb69d667be131b960587f323bb6c60bd4dfbb1ba40c90287c5883465b2f751e32bf383d46373678a7c86c38803e4bf80d2ad752385296075
|
|
7
|
+
data.tar.gz: c26e25973b242036bca129b90b425321f223f714aa11688ec873940844b5aa703ba4adbfc0d446c33625f2d4876bbfbbaec13e8f3f0c0455f3b8cdf9e82683f2
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
photo-cook (1.0.
|
|
4
|
+
photo-cook (1.0.1)
|
|
5
5
|
mini_magick (~> 4.0)
|
|
6
6
|
rack (~> 1.5)
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ GEM
|
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
11
|
mini_magick (4.1.0)
|
|
12
|
-
rack (1.
|
|
12
|
+
rack (1.6.4)
|
|
13
13
|
|
|
14
14
|
PLATFORMS
|
|
15
15
|
ruby
|
data/lib/photo-cook/resizer.rb
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
# Resize algorithms from
|
|
2
|
-
# https://github.com/carrierwaveuploader/carrierwave/blob/71cb18bba4a2078524d1ea683f267d3a97aa9bc8/lib/carrierwave/processing/rmagick.rb
|
|
3
|
-
|
|
4
1
|
require 'mini_magick'
|
|
5
2
|
|
|
6
3
|
module PhotoCook
|
|
7
4
|
class Resizer
|
|
8
5
|
include Singleton
|
|
9
6
|
|
|
10
|
-
CENTER_GRAVITY
|
|
11
|
-
TRANSPARENT_BACKGROUND
|
|
12
|
-
PHOTO_QUALITY = 100
|
|
7
|
+
CENTER_GRAVITY = 'Center'.freeze
|
|
8
|
+
TRANSPARENT_BACKGROUND = 'rgba(255,255,255,0.0)'.freeze
|
|
13
9
|
|
|
14
10
|
def resize(photo_path, width, height, crop = false)
|
|
15
11
|
if crop
|
|
@@ -22,50 +18,66 @@ module PhotoCook
|
|
|
22
18
|
# Resize the photo to fit within the specified dimensions:
|
|
23
19
|
# - the original aspect ratio will be kept
|
|
24
20
|
# - new dimensions will be not larger then the specified
|
|
21
|
+
#
|
|
22
|
+
# https://github.com/carrierwaveuploader/carrierwave/blob/71cb18bba4a2078524d1ea683f267d3a97aa9bc8/lib/carrierwave/processing/mini_magick.rb#L131
|
|
25
23
|
def resize_to_fit(photo_path, width, height)
|
|
24
|
+
|
|
26
25
|
# Do nothing if photo is not valid so exceptions will be not thrown
|
|
27
26
|
return unless (photo = open(photo_path)).try(:valid?)
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
width, height = parse_dimensions(width, height)
|
|
29
|
+
store_path = PhotoCook.assemble_path(photo_path, width, height, false)
|
|
30
|
+
|
|
31
|
+
if width > 0 || height > 0
|
|
32
|
+
photo.combine_options do |cmd|
|
|
33
|
+
cmd.resize "#{width == 0 ? nil : width}x#{height == 0 ? nil : height}>"
|
|
34
|
+
end
|
|
32
35
|
end
|
|
33
36
|
|
|
34
|
-
store
|
|
37
|
+
store(photo, store_path)
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
# Resize the photo to fit within the specified dimensions:
|
|
38
41
|
# - new dimensions will be the same as specified
|
|
39
42
|
# - the photo will be cropped if necessary
|
|
43
|
+
#
|
|
44
|
+
# https://github.com/carrierwaveuploader/carrierwave/blob/71cb18bba4a2078524d1ea683f267d3a97aa9bc8/lib/carrierwave/processing/mini_magick.rb#L176
|
|
40
45
|
def resize_to_fill(photo_path, width, height)
|
|
46
|
+
|
|
41
47
|
# Do nothing if photo is not valid so exceptions will be not thrown
|
|
42
48
|
return unless (photo = open(photo_path)).try(:valid?)
|
|
43
49
|
|
|
44
|
-
|
|
45
|
-
photo
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
width, height = parse_dimensions(width, height)
|
|
51
|
+
cols, rows = photo[:dimensions]
|
|
52
|
+
store_path = PhotoCook.assemble_path(photo_path, width, height, true)
|
|
53
|
+
|
|
54
|
+
if width > 0 || height > 0
|
|
55
|
+
photo.combine_options do |cmd|
|
|
56
|
+
if width != cols || height != rows
|
|
57
|
+
scale_x = width / cols.to_f
|
|
58
|
+
scale_y = height / rows.to_f
|
|
59
|
+
if scale_x >= scale_y
|
|
60
|
+
cols = (scale_x * (cols + 0.5)).round
|
|
61
|
+
rows = (scale_x * (rows + 0.5)).round
|
|
62
|
+
cmd.resize "#{cols}>"
|
|
63
|
+
else
|
|
64
|
+
cols = (scale_y * (cols + 0.5)).round
|
|
65
|
+
rows = (scale_y * (rows + 0.5)).round
|
|
66
|
+
cmd.resize "x#{rows}>"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
cmd.gravity CENTER_GRAVITY
|
|
70
|
+
cmd.background TRANSPARENT_BACKGROUND
|
|
71
|
+
if cols != width || rows != height
|
|
72
|
+
cmd.extent "#{width == 0 ? nil : width}x#{height == 0 ? nil : height}>"
|
|
57
73
|
end
|
|
58
74
|
end
|
|
59
|
-
cmd.gravity CENTER_GRAVITY
|
|
60
|
-
cmd.background TRANSPARENT_BACKGROUND
|
|
61
|
-
cmd.quality PHOTO_QUALITY
|
|
62
|
-
cmd.extent "#{width}x#{height}" if cols != width || rows != height
|
|
63
75
|
end
|
|
64
76
|
|
|
65
|
-
store
|
|
77
|
+
store(photo, store_path)
|
|
66
78
|
end
|
|
67
79
|
|
|
68
|
-
|
|
80
|
+
protected
|
|
69
81
|
|
|
70
82
|
def open(photo_path)
|
|
71
83
|
begin
|
|
@@ -86,8 +98,15 @@ module PhotoCook
|
|
|
86
98
|
resized_photo
|
|
87
99
|
end
|
|
88
100
|
|
|
89
|
-
def
|
|
90
|
-
|
|
101
|
+
def parse_dimensions(width, height)
|
|
102
|
+
width = width == :auto ? 0 : width.to_i
|
|
103
|
+
height = height == :auto ? 0 : height.to_i
|
|
104
|
+
check_dimensions!(width, height)
|
|
105
|
+
[width, height]
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def check_dimensions!(width, height)
|
|
109
|
+
raise ArgumentError, 'Expected positive numbers ' if width < 0 || height < 0
|
|
91
110
|
end
|
|
92
111
|
end
|
|
93
112
|
end
|
data/lib/photo-cook/version.rb
CHANGED
data/lib/photo-cook.rb
CHANGED
|
@@ -16,22 +16,22 @@ module PhotoCook
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def self.assemble_path(path, width, height, crop = false)
|
|
19
|
-
File.join
|
|
19
|
+
File.join(assemble_dir(path), assemble_name(path, width, height, crop))
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def self.assemble_dir(path)
|
|
23
|
-
File.join
|
|
23
|
+
File.join(File.dirname(path), resize_dir)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def self.assemble_name(path, width, height, crop = false)
|
|
27
|
-
File.basename(path, '.*') +
|
|
27
|
+
File.basename(path, '.*') + assemble_command(width, height, crop) + File.extname(path)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def self.assemble_command(width, height, crop = false)
|
|
31
|
-
|
|
31
|
+
width, height = width.to_i, height.to_i
|
|
32
|
+
prefix = "-#{width == 0 ? nil : width}x#{height == 0 ? nil : height}"
|
|
32
33
|
prefix + (crop ? 'crop' : '')
|
|
33
34
|
end
|
|
34
|
-
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
require 'photo-cook/engine' if defined?(Rails)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: photo-cook
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yaroslav Konoplov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|