snapimage 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/snapimage/image/image.rb +13 -10
- data/lib/snapimage/server_actions/server_actions.generate_image.rb +6 -22
- data/lib/snapimage/storage/storage_server.rb +3 -5
- data/lib/snapimage/version.rb +1 -1
- data/spec/snapimage/image/image_spec.rb +20 -36
- data/spec/snapimage/storage/storage_server_spec.rb +4 -4
- metadata +3 -3
@@ -29,12 +29,14 @@ module SnapImage
|
|
29
29
|
# Arguments:
|
30
30
|
# * path:: Local path or URL
|
31
31
|
def set_image_from_path(path)
|
32
|
+
destroy!
|
32
33
|
@image = Magick::ImageList.new(path)
|
33
34
|
end
|
34
35
|
|
35
36
|
# Arguments:
|
36
37
|
# * blob:: Image blob
|
37
38
|
def set_image_from_blob(blob)
|
39
|
+
destroy!
|
38
40
|
@image = Magick::ImageList.new
|
39
41
|
@image.from_blob(blob)
|
40
42
|
end
|
@@ -42,6 +44,7 @@ module SnapImage
|
|
42
44
|
# Arguments:
|
43
45
|
# * image:: RMagick Image
|
44
46
|
def set_image_from_image(image)
|
47
|
+
destroy!
|
45
48
|
@image = image
|
46
49
|
end
|
47
50
|
|
@@ -58,11 +61,10 @@ module SnapImage
|
|
58
61
|
end
|
59
62
|
|
60
63
|
def destroy!
|
61
|
-
@image.destroy!
|
64
|
+
@image.destroy! if @image && !@image.destroyed?
|
62
65
|
end
|
63
66
|
|
64
|
-
# Crops the image with the given parameters
|
65
|
-
# object.
|
67
|
+
# Crops the image with the given parameters.
|
66
68
|
#
|
67
69
|
# Arguments:
|
68
70
|
# * x:: x coordinate of the top left corner
|
@@ -70,10 +72,10 @@ module SnapImage
|
|
70
72
|
# * width:: width of the crop rectangle
|
71
73
|
# * height:: height of the crop rectangle
|
72
74
|
def crop(x, y, width, height)
|
73
|
-
|
75
|
+
@image.crop!(x, y, width, height)
|
74
76
|
end
|
75
77
|
|
76
|
-
#
|
78
|
+
# Resizes the image with the given paramaters.
|
77
79
|
#
|
78
80
|
# Arguments:
|
79
81
|
# * width:: Width to resize to
|
@@ -85,16 +87,17 @@ module SnapImage
|
|
85
87
|
# resizing.
|
86
88
|
height ||= [width, @image.rows].max
|
87
89
|
if maintain_aspect_ratio
|
88
|
-
|
90
|
+
@image.resize_to_fit!(width, height)
|
89
91
|
else
|
90
|
-
|
92
|
+
@image.resize!(width, height)
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
94
|
-
#
|
95
|
-
# object.
|
96
|
+
# Sharpens the image.
|
96
97
|
def sharpen
|
97
|
-
|
98
|
+
image = @image.sharpen
|
99
|
+
destroy!
|
100
|
+
@image = image
|
98
101
|
end
|
99
102
|
end
|
100
103
|
end
|
@@ -26,7 +26,7 @@ module SnapImage
|
|
26
26
|
image_height: stored_image.height
|
27
27
|
)
|
28
28
|
# Release memory.
|
29
|
-
|
29
|
+
GC.start
|
30
30
|
else
|
31
31
|
@response.set_bad_request
|
32
32
|
end
|
@@ -122,10 +122,7 @@ module SnapImage
|
|
122
122
|
width: @request.json["crop_width"],
|
123
123
|
height: @request.json["crop_height"]
|
124
124
|
}
|
125
|
-
|
126
|
-
# Release memory.
|
127
|
-
image.destroy!
|
128
|
-
image = cropped_image
|
125
|
+
image.crop(crop[:x], crop[:y], crop[:width], crop[:height])
|
129
126
|
end
|
130
127
|
|
131
128
|
# Resize.
|
@@ -136,34 +133,21 @@ module SnapImage
|
|
136
133
|
if width && height
|
137
134
|
# When both width and height are specified, resize without
|
138
135
|
# maintaining the aspect ratio.
|
139
|
-
|
136
|
+
image.resize(width, height, false)
|
140
137
|
else
|
141
138
|
# When only one of width/height is specified, set the other to the
|
142
139
|
# max and maintain the aspect ratio.
|
143
|
-
|
140
|
+
image.resize(width || @config["max_width"], height || @config["max_height"])
|
144
141
|
end
|
145
|
-
# Release memeory.
|
146
|
-
image.destroy!
|
147
|
-
image = resized_image
|
148
142
|
end
|
149
143
|
|
150
144
|
# Resize to fit.
|
151
145
|
resized_to_fit = resize_to_fit?(image)
|
152
|
-
if resized_to_fit
|
153
|
-
resized_image = image.resize(get_max_width, get_max_height)
|
154
|
-
# Release memeory.
|
155
|
-
image.destroy!
|
156
|
-
image = resized_image
|
157
|
-
end
|
146
|
+
image.resize(get_max_width, get_max_height) if resized_to_fit
|
158
147
|
|
159
148
|
# Sharpen.
|
160
149
|
sharpened = sharpen?
|
161
|
-
if sharpened
|
162
|
-
sharpened_image = image.sharpen
|
163
|
-
# Release memeory.
|
164
|
-
image.destroy!
|
165
|
-
image = sharpened_image
|
166
|
-
end
|
150
|
+
image.sharpen if sharpened
|
167
151
|
|
168
152
|
# Get the dimensions at the end.
|
169
153
|
if cropped || resized || resized_to_fit || sharpened
|
@@ -99,13 +99,11 @@ module SnapImage
|
|
99
99
|
def resize_to_fit(image, name)
|
100
100
|
# Resize the image if it's larger than the max width/height.
|
101
101
|
if image.width > @config["max_width"] || image.height > @config["max_height"]
|
102
|
-
|
102
|
+
image.resize([image.width, @config["max_width"]].min, [image.height, @config["max_height"]].min)
|
103
103
|
# Generate a new name.
|
104
|
-
|
105
|
-
# Release memory.
|
106
|
-
image.destroy!
|
104
|
+
name = SnapImage::ImageNameUtils.get_resized_image_name(name, image.width, image.height)
|
107
105
|
end
|
108
|
-
{ image:
|
106
|
+
{ image: image, name: name }
|
109
107
|
end
|
110
108
|
end
|
111
109
|
end
|
data/lib/snapimage/version.rb
CHANGED
@@ -9,20 +9,12 @@ describe SnapImage::Image do
|
|
9
9
|
before do
|
10
10
|
@image = SnapImage::Image.new
|
11
11
|
@image.set_image_from_path(@image_path)
|
12
|
-
@original_width = @image.width
|
13
|
-
@original_height = @image.height
|
14
12
|
end
|
15
13
|
|
16
|
-
it "
|
17
|
-
|
18
|
-
image.width.should eq 20
|
19
|
-
image.height.should eq 30
|
20
|
-
end
|
21
|
-
|
22
|
-
it "does not modify the original image" do
|
23
|
-
image = @image.crop(10, 30, 20, 30)
|
24
|
-
@image.width.should eq @original_width
|
25
|
-
@image.height.should eq @original_height
|
14
|
+
it "correctly crops image" do
|
15
|
+
@image.crop(10, 30, 20, 30)
|
16
|
+
@image.width.should eq 20
|
17
|
+
@image.height.should eq 30
|
26
18
|
end
|
27
19
|
end
|
28
20
|
|
@@ -30,42 +22,34 @@ describe SnapImage::Image do
|
|
30
22
|
before do
|
31
23
|
@image = SnapImage::Image.new
|
32
24
|
@image.set_image_from_path(@image_path)
|
33
|
-
@original_width = @image.width
|
34
|
-
@original_height = @image.height
|
35
25
|
end
|
36
26
|
|
37
27
|
it "raises an error when no height is specified and maintaining aspect ratio is false" do
|
38
28
|
expect { @image.resize(100, nil, false) }.should raise_error
|
39
29
|
end
|
40
30
|
|
41
|
-
it "
|
42
|
-
|
43
|
-
image.width.should eq 330
|
44
|
-
image.height.should eq 220
|
45
|
-
end
|
46
|
-
|
47
|
-
it "returns an appropriately resized image when the width is less than the height" do
|
48
|
-
image = @image.resize(150)
|
49
|
-
image.width.should eq 150
|
50
|
-
image.height.should eq 100
|
31
|
+
it "resizes the image when the width is larger or equal to the height" do
|
32
|
+
@image.resize(330)
|
33
|
+
@image.width.should eq 330
|
34
|
+
@image.height.should eq 220
|
51
35
|
end
|
52
36
|
|
53
|
-
it "
|
54
|
-
|
55
|
-
image.width.should eq 150
|
56
|
-
image.height.should eq 100
|
37
|
+
it "resizes the image when the width is less than the height" do
|
38
|
+
@image.resize(150)
|
39
|
+
@image.width.should eq 150
|
40
|
+
@image.height.should eq 100
|
57
41
|
end
|
58
42
|
|
59
|
-
it "
|
60
|
-
|
61
|
-
image.width.should eq
|
62
|
-
image.height.should eq
|
43
|
+
it "resizes the image to fit within the width/height while maintaining aspect ratio" do
|
44
|
+
@image.resize(150, 200)
|
45
|
+
@image.width.should eq 150
|
46
|
+
@image.height.should eq 100
|
63
47
|
end
|
64
48
|
|
65
|
-
it "
|
66
|
-
|
67
|
-
@image.width.should eq
|
68
|
-
@image.height.should eq
|
49
|
+
it "stretches image when not maintaining aspect ratio" do
|
50
|
+
@image.resize(100, 200, false)
|
51
|
+
@image.width.should eq 100
|
52
|
+
@image.height.should eq 200
|
69
53
|
end
|
70
54
|
end
|
71
55
|
end
|
@@ -79,16 +79,16 @@ describe SnapImage::StorageServer::Base do
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it "returns the resized image and name given a base image" do
|
82
|
-
|
83
|
-
result = @server.send(:resize_to_fit, image, "12345678-2048x100.png")
|
82
|
+
@image.resize(2048, 100, false)
|
83
|
+
result = @server.send(:resize_to_fit, @image, "12345678-2048x100.png")
|
84
84
|
result[:image].width.should eq 1024
|
85
85
|
result[:image].height.should eq 50
|
86
86
|
result[:name].should eq "12345678-1024x50.png"
|
87
87
|
end
|
88
88
|
|
89
89
|
it "returns the resized image and name given a modified image" do
|
90
|
-
|
91
|
-
result = @server.send(:resize_to_fit, image, "12345678-1x1-0x0x1x1-2048x100-0.png")
|
90
|
+
@image.resize(2048, 100, false)
|
91
|
+
result = @server.send(:resize_to_fit, @image, "12345678-1x1-0x0x1x1-2048x100-0.png")
|
92
92
|
result[:image].width.should eq 1024
|
93
93
|
result[:image].height.should eq 50
|
94
94
|
result[:name].should eq "12345678-1x1-0x0x1x1-1024x50-0.png"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snapimage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -222,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
222
222
|
version: '0'
|
223
223
|
segments:
|
224
224
|
- 0
|
225
|
-
hash:
|
225
|
+
hash: 1128448920208195157
|
226
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
227
|
none: false
|
228
228
|
requirements:
|
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
231
|
version: '0'
|
232
232
|
segments:
|
233
233
|
- 0
|
234
|
-
hash:
|
234
|
+
hash: 1128448920208195157
|
235
235
|
requirements: []
|
236
236
|
rubyforge_project:
|
237
237
|
rubygems_version: 1.8.23
|