chunky_png 1.3.0 → 1.3.1
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.
- data/README.rdoc +3 -0
- data/lib/chunky_png/canvas.rb +99 -62
- data/lib/chunky_png/canvas/drawing.rb +91 -68
- data/lib/chunky_png/canvas/operations.rb +155 -120
- data/lib/chunky_png/canvas/stream_importing.rb +2 -2
- data/lib/chunky_png/chunk.rb +111 -93
- data/lib/chunky_png/color.rb +312 -253
- data/lib/chunky_png/datastream.rb +1 -1
- data/lib/chunky_png/palette.rb +66 -49
- data/lib/chunky_png/version.rb +1 -1
- data/spec/chunky_png/canvas/stream_importing_spec.rb +9 -0
- data/spec/chunky_png/color_spec.rb +92 -68
- data/spec/resources/pixelstream.bgr +67 -0
- metadata +4 -2
@@ -1,54 +1,54 @@
|
|
1
1
|
module ChunkyPNG
|
2
2
|
class Canvas
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# these methods are available on every canvas.
|
3
|
+
# The ChunkyPNG::Canvas::Operations module defines methods to perform
|
4
|
+
# operations on a {ChunkyPNG::Canvas}. The module is included into the
|
5
|
+
# Canvas class so all these methods are available on every canvas.
|
7
6
|
#
|
8
|
-
# Note that some of these operations modify the canvas, while some
|
9
|
-
# a new canvas and leave the original intact.
|
7
|
+
# Note that some of these operations modify the canvas, while some
|
8
|
+
# operations return a new canvas and leave the original intact.
|
10
9
|
#
|
11
10
|
# @see ChunkyPNG::Canvas
|
12
11
|
module Operations
|
13
|
-
|
14
|
-
# Converts the canvas to grascale.
|
12
|
+
# Converts the canvas to grayscale.
|
15
13
|
#
|
16
|
-
# This method will modify the canvas. The obtain a new canvas and leave
|
17
|
-
# current instance intact, use {#grayscale} instead.
|
14
|
+
# This method will modify the canvas. The obtain a new canvas and leave
|
15
|
+
# the current instance intact, use {#grayscale} instead.
|
18
16
|
#
|
19
17
|
# @return [ChunkyPNG::Canvas] Returns itself, converted to grayscale.
|
20
18
|
# @see {#grayscale}
|
21
19
|
# @see {ChunkyPNG::Color#to_grayscale}
|
22
20
|
def grayscale!
|
23
21
|
pixels.map! { |pixel| ChunkyPNG::Color.to_grayscale(pixel) }
|
24
|
-
|
22
|
+
self
|
25
23
|
end
|
26
24
|
|
27
|
-
# Converts the canvas to
|
25
|
+
# Converts the canvas to grayscale, returning a new canvas.
|
28
26
|
#
|
29
27
|
# This method will not modify the canvas. To modift the current canvas,
|
30
28
|
# use {#grayscale!} instead.
|
31
29
|
#
|
32
|
-
# @return [ChunkyPNG::Canvas] A copy of the canvas, converted to
|
30
|
+
# @return [ChunkyPNG::Canvas] A copy of the canvas, converted to
|
31
|
+
# grayscale.
|
33
32
|
# @see {#grayscale!}
|
34
33
|
# @see {ChunkyPNG::Color#to_grayscale}
|
35
34
|
def grayscale
|
36
35
|
dup.grayscale!
|
37
36
|
end
|
38
|
-
|
39
|
-
# Composes another image onto this image using alpha blending. This will
|
40
|
-
# the current canvas.
|
37
|
+
|
38
|
+
# Composes another image onto this image using alpha blending. This will
|
39
|
+
# modify the current canvas.
|
41
40
|
#
|
42
|
-
# If you simply want to replace pixels or when the other image does not
|
43
|
-
# transparency, it is faster to use {#replace!}.
|
41
|
+
# If you simply want to replace pixels or when the other image does not
|
42
|
+
# have transparency, it is faster to use {#replace!}.
|
44
43
|
#
|
45
|
-
# @param [ChunkyPNG::Canvas] other The foreground canvas to compose on
|
46
|
-
#
|
44
|
+
# @param [ChunkyPNG::Canvas] other The foreground canvas to compose on
|
45
|
+
# the current canvas, using alpha compositing.
|
47
46
|
# @param [Integer] offset_x The x-offset to apply the new foreground on.
|
48
47
|
# @param [Integer] offset_y The y-offset to apply the new foreground on.
|
49
|
-
# @return [ChunkyPNG::Canvas] Returns itself, but with the other canvas
|
50
|
-
#
|
51
|
-
#
|
48
|
+
# @return [ChunkyPNG::Canvas] Returns itself, but with the other canvas
|
49
|
+
# composed onto it.
|
50
|
+
# @raise [ChunkyPNG::OutOfBounds] when the other canvas doesn't fit on
|
51
|
+
# this one, given the offset and size of the other canvas.
|
52
52
|
# @see #replace!
|
53
53
|
# @see #compose
|
54
54
|
def compose!(other, offset_x = 0, offset_y = 0)
|
@@ -56,43 +56,51 @@ module ChunkyPNG
|
|
56
56
|
|
57
57
|
for y in 0...other.height do
|
58
58
|
for x in 0...other.width do
|
59
|
-
set_pixel(x + offset_x,
|
59
|
+
set_pixel(x + offset_x,
|
60
|
+
y + offset_y,
|
61
|
+
ChunkyPNG::Color.compose(other.get_pixel(x, y),
|
62
|
+
get_pixel(x + offset_x,
|
63
|
+
y + offset_y)))
|
60
64
|
end
|
61
65
|
end
|
62
66
|
self
|
63
67
|
end
|
64
|
-
|
65
|
-
# Composes another image onto this image using alpha blending. This will
|
66
|
-
# a new canvas and leave the original intact.
|
68
|
+
|
69
|
+
# Composes another image onto this image using alpha blending. This will
|
70
|
+
# return a new canvas and leave the original intact.
|
67
71
|
#
|
68
|
-
# If you simply want to replace pixels or when the other image does not
|
69
|
-
# transparency, it is faster to use {#replace}.
|
72
|
+
# If you simply want to replace pixels or when the other image does not
|
73
|
+
# have transparency, it is faster to use {#replace}.
|
70
74
|
#
|
71
75
|
# @param (see #compose!)
|
72
|
-
# @return [ChunkyPNG::Canvas] Returns the new canvas, composed of the
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
76
|
+
# @return [ChunkyPNG::Canvas] Returns the new canvas, composed of the
|
77
|
+
# other 2.
|
78
|
+
# @raise [ChunkyPNG::OutOfBounds] when the other canvas doesn't fit on
|
79
|
+
# this one, given the offset and size of the other canvas.
|
80
|
+
#
|
81
|
+
# @note API changed since 1.0 - This method now no longer is in place,
|
82
|
+
# but returns a new canvas and leaves the original intact. Use
|
83
|
+
# {#compose!} if you want to compose on the canvas in place.
|
79
84
|
# @see #replace
|
80
85
|
def compose(other, offset_x = 0, offset_y = 0)
|
81
86
|
dup.compose!(other, offset_x, offset_y)
|
82
87
|
end
|
83
|
-
|
84
|
-
# Replaces pixels on this image by pixels from another pixels, on a given
|
85
|
-
# This method will modify the current canvas.
|
88
|
+
|
89
|
+
# Replaces pixels on this image by pixels from another pixels, on a given
|
90
|
+
# offset. This method will modify the current canvas.
|
86
91
|
#
|
87
|
-
# This will completely replace the pixels of the background image. If you
|
88
|
-
# them with semi-transparent pixels from the foreground
|
92
|
+
# This will completely replace the pixels of the background image. If you
|
93
|
+
# want to blend them with semi-transparent pixels from the foreground
|
94
|
+
# image, see {#compose!}.
|
89
95
|
#
|
90
|
-
# @param [ChunkyPNG::Canvas] other The foreground canvas to get the
|
96
|
+
# @param [ChunkyPNG::Canvas] other The foreground canvas to get the
|
97
|
+
# pixels from.
|
91
98
|
# @param [Integer] offset_x The x-offset to apply the new foreground on.
|
92
99
|
# @param [Integer] offset_y The y-offset to apply the new foreground on.
|
93
|
-
# @return [ChunkyPNG::Canvas] Returns itself, but with the other canvas
|
94
|
-
#
|
95
|
-
#
|
100
|
+
# @return [ChunkyPNG::Canvas] Returns itself, but with the other canvas
|
101
|
+
# placed onto it.
|
102
|
+
# @raise [ChunkyPNG::OutOfBounds] when the other canvas doesn't fit on
|
103
|
+
# this one, given the offset and size of the other canvas.
|
96
104
|
# @see #compose!
|
97
105
|
# @see #replace
|
98
106
|
def replace!(other, offset_x = 0, offset_y = 0)
|
@@ -106,80 +114,93 @@ module ChunkyPNG
|
|
106
114
|
self
|
107
115
|
end
|
108
116
|
|
109
|
-
# Replaces pixels on this image by pixels from another pixels, on a given
|
110
|
-
# This method will modify the current canvas.
|
117
|
+
# Replaces pixels on this image by pixels from another pixels, on a given
|
118
|
+
# offset. This method will modify the current canvas.
|
111
119
|
#
|
112
|
-
# This will completely replace the pixels of the background image. If you
|
113
|
-
# them with semi-transparent pixels from the foreground
|
120
|
+
# This will completely replace the pixels of the background image. If you
|
121
|
+
# want to blend them with semi-transparent pixels from the foreground
|
122
|
+
# image, see {#compose!}.
|
114
123
|
#
|
115
124
|
# @param (see #replace!)
|
116
125
|
# @return [ChunkyPNG::Canvas] Returns a new, combined canvas.
|
117
|
-
# @raise [ChunkyPNG::OutOfBounds] when the other canvas doesn't fit on
|
118
|
-
#
|
126
|
+
# @raise [ChunkyPNG::OutOfBounds] when the other canvas doesn't fit on
|
127
|
+
# this one, given the offset and size of the other canvas.
|
119
128
|
#
|
120
|
-
# @note API changed since 1.0 - This method now no longer is in place,
|
121
|
-
#
|
122
|
-
#
|
123
|
-
# @see #compose
|
129
|
+
# @note API changed since 1.0 - This method now no longer is in place,
|
130
|
+
# but returns a new canvas and leaves the original intact. Use
|
131
|
+
# {#replace!} if you want to replace pixels on the canvas in place.
|
132
|
+
# @see #compose
|
124
133
|
def replace(other, offset_x = 0, offset_y = 0)
|
125
134
|
dup.replace!(other, offset_x, offset_y)
|
126
135
|
end
|
127
136
|
|
128
|
-
# Crops an image, given the coordinates and size of the image that needs
|
129
|
-
# This will leave the original image intact and return a
|
130
|
-
# copied from the original image.
|
131
|
-
#
|
132
|
-
# @param [Integer] x The x-coordinate of the top left corner of the image
|
133
|
-
#
|
137
|
+
# Crops an image, given the coordinates and size of the image that needs
|
138
|
+
# to be cut out. This will leave the original image intact and return a
|
139
|
+
# new, cropped image with pixels copied from the original image.
|
140
|
+
#
|
141
|
+
# @param [Integer] x The x-coordinate of the top left corner of the image
|
142
|
+
# to be cropped.
|
143
|
+
# @param [Integer] y The y-coordinate of the top left corner of the image
|
144
|
+
# to be cropped.
|
134
145
|
# @param [Integer] crop_width The width of the image to be cropped.
|
135
146
|
# @param [Integer] crop_height The height of the image to be cropped.
|
136
147
|
# @return [ChunkyPNG::Canvas] Returns the newly created cropped image.
|
137
|
-
# @raise [ChunkyPNG::OutOfBounds] when the crop dimensions plus the given
|
138
|
-
#
|
148
|
+
# @raise [ChunkyPNG::OutOfBounds] when the crop dimensions plus the given
|
149
|
+
# coordinates are bigger then the original image.
|
139
150
|
def crop(x, y, crop_width, crop_height)
|
140
151
|
dup.crop!(x, y, crop_width, crop_height)
|
141
152
|
end
|
142
|
-
|
143
|
-
# Crops an image, given the coordinates and size of the image that needs
|
153
|
+
|
154
|
+
# Crops an image, given the coordinates and size of the image that needs
|
155
|
+
# to be cut out.
|
144
156
|
#
|
145
|
-
# This will change the size and content of the current canvas. Use
|
146
|
-
# have a new canvas returned instead, leaving the
|
157
|
+
# This will change the size and content of the current canvas. Use
|
158
|
+
# {#crop} if you want to have a new canvas returned instead, leaving the
|
159
|
+
# current canvas intact.
|
147
160
|
#
|
148
|
-
# @param [Integer] x The x-coordinate of the top left corner of the image
|
149
|
-
#
|
161
|
+
# @param [Integer] x The x-coordinate of the top left corner of the image
|
162
|
+
# to be cropped.
|
163
|
+
# @param [Integer] y The y-coordinate of the top left corner of the image
|
164
|
+
# to be cropped.
|
150
165
|
# @param [Integer] crop_width The width of the image to be cropped.
|
151
166
|
# @param [Integer] crop_height The height of the image to be cropped.
|
152
|
-
# @return [ChunkyPNG::Canvas] Returns itself, but cropped.
|
153
|
-
# @raise [ChunkyPNG::OutOfBounds] when the crop dimensions plus the given
|
154
|
-
#
|
167
|
+
# @return [ChunkyPNG::Canvas] Returns itself, but cropped.
|
168
|
+
# @raise [ChunkyPNG::OutOfBounds] when the crop dimensions plus the given
|
169
|
+
# coordinates are bigger then the original image.
|
155
170
|
def crop!(x, y, crop_width, crop_height)
|
156
|
-
|
157
|
-
|
158
|
-
|
171
|
+
if crop_width + x > width
|
172
|
+
raise ChunkyPNG::OutOfBounds, 'Original image width is too small!'
|
173
|
+
end
|
174
|
+
if crop_height + y > height
|
175
|
+
raise ChunkyPNG::OutOfBounds, 'Original image height is too small!'
|
176
|
+
end
|
177
|
+
|
159
178
|
new_pixels = []
|
160
179
|
for cy in 0...crop_height do
|
161
180
|
new_pixels += pixels.slice((cy + y) * width + x, crop_width)
|
162
181
|
end
|
163
182
|
replace_canvas!(crop_width, crop_height, new_pixels)
|
164
183
|
end
|
165
|
-
|
184
|
+
|
166
185
|
# Flips the image horizontally, leaving the original intact.
|
167
186
|
#
|
168
|
-
# This will flip the image on its horizontal axis, e.g. pixels on the top
|
169
|
-
# be pixels on the bottom. Chaining this method twice will
|
170
|
-
# This method will leave the original object
|
187
|
+
# This will flip the image on its horizontal axis, e.g. pixels on the top
|
188
|
+
# will now be pixels on the bottom. Chaining this method twice will
|
189
|
+
# return the original canvas. This method will leave the original object
|
190
|
+
# intact and return a new canvas.
|
171
191
|
#
|
172
192
|
# @return [ChunkyPNG::Canvas] The flipped image
|
173
193
|
# @see #flip_horizontally!
|
174
194
|
def flip_horizontally
|
175
195
|
dup.flip_horizontally!
|
176
196
|
end
|
177
|
-
|
197
|
+
|
178
198
|
# Flips the image horizontally in place.
|
179
199
|
#
|
180
|
-
# This will flip the image on its horizontal axis, e.g. pixels on the top
|
181
|
-
# be pixels on the bottom. Chaining this method twice will
|
182
|
-
# This method will leave the original object
|
200
|
+
# This will flip the image on its horizontal axis, e.g. pixels on the top
|
201
|
+
# will now be pixels on the bottom. Chaining this method twice will
|
202
|
+
# return the original canvas. This method will leave the original object
|
203
|
+
# intact and return a new canvas.
|
183
204
|
#
|
184
205
|
# @return [ChunkyPNG::Canvas] Itself, but flipped
|
185
206
|
# @see #flip_horizontally
|
@@ -190,17 +211,18 @@ module ChunkyPNG
|
|
190
211
|
replace_row!(other_y, row(y))
|
191
212
|
replace_row!(y, other_row)
|
192
213
|
end
|
193
|
-
|
214
|
+
self
|
194
215
|
end
|
195
|
-
|
216
|
+
|
196
217
|
alias_method :flip!, :flip_horizontally!
|
197
218
|
alias_method :flip, :flip_horizontally
|
198
|
-
|
219
|
+
|
199
220
|
# Flips the image vertically, leaving the original intact.
|
200
221
|
#
|
201
|
-
# This will flip the image on its vertical axis, e.g. pixels on the left
|
202
|
-
# be pixels on the right. Chaining this method twice will return
|
203
|
-
# This method will leave the original object intact
|
222
|
+
# This will flip the image on its vertical axis, e.g. pixels on the left
|
223
|
+
# will now be pixels on the right. Chaining this method twice will return
|
224
|
+
# the original canvas. This method will leave the original object intact
|
225
|
+
# and return a new canvas.
|
204
226
|
#
|
205
227
|
# @return [ChunkyPNG::Canvas] The flipped image
|
206
228
|
# @see #flip_vertically!
|
@@ -210,9 +232,10 @@ module ChunkyPNG
|
|
210
232
|
|
211
233
|
# Flips the image vertically in place.
|
212
234
|
#
|
213
|
-
# This will flip the image on its vertical axis, e.g. pixels on the left
|
214
|
-
# be pixels on the right. Chaining this method twice will return
|
215
|
-
# This method will leave the original object intact
|
235
|
+
# This will flip the image on its vertical axis, e.g. pixels on the left
|
236
|
+
# will now be pixels on the right. Chaining this method twice will return
|
237
|
+
# the original canvas. This method will leave the original object intact
|
238
|
+
# and return a new canvas.
|
216
239
|
#
|
217
240
|
# @return [ChunkyPNG::Canvas] Itself, but flipped
|
218
241
|
# @see #flip_vertically
|
@@ -220,48 +243,49 @@ module ChunkyPNG
|
|
220
243
|
for y in 0...height do
|
221
244
|
replace_row!(y, row(y).reverse)
|
222
245
|
end
|
223
|
-
|
246
|
+
self
|
224
247
|
end
|
225
|
-
|
248
|
+
|
226
249
|
alias_method :mirror!, :flip_vertically!
|
227
250
|
alias_method :mirror, :flip_vertically
|
228
251
|
|
229
252
|
# Returns a new canvas instance that is rotated 90 degrees clockwise.
|
230
253
|
#
|
231
|
-
# This method will return a new canvas and leaves the original intact.
|
232
|
-
# See {#rotate_right!} for the in place version.
|
254
|
+
# This method will return a new canvas and leaves the original intact.
|
233
255
|
#
|
234
256
|
# @return [ChunkyPNG::Canvas] A clockwise-rotated copy.
|
257
|
+
# @see #rotate_right! for the in place version.
|
235
258
|
def rotate_right
|
236
259
|
dup.rotate_right!
|
237
260
|
end
|
238
261
|
|
239
262
|
# Rotates the image 90 degrees clockwise in place.
|
240
263
|
#
|
241
|
-
# This method will change the current canvas.
|
242
|
-
# a version that leaves th current canvas intact
|
264
|
+
# This method will change the current canvas.
|
243
265
|
#
|
244
266
|
# @return [ChunkyPNG::Canvas] Itself, but rotated clockwise.
|
267
|
+
# @see #rotate_right for a version that leaves the current canvas intact
|
245
268
|
def rotate_right!
|
246
269
|
rotated = self.class.new(height, width)
|
247
270
|
new_pixels = []
|
248
271
|
0.upto(width - 1) { |i| new_pixels += column(i).reverse }
|
249
272
|
replace_canvas!(height, width, new_pixels)
|
250
273
|
end
|
251
|
-
|
274
|
+
|
252
275
|
alias_method :rotate_clockwise, :rotate_right
|
253
276
|
alias_method :rotate_clockwise!, :rotate_right!
|
254
|
-
|
277
|
+
|
255
278
|
# Returns an image that is rotated 90 degrees counter-clockwise.
|
256
279
|
#
|
257
|
-
# This method will leave the original object intact and return a new
|
258
|
-
#
|
280
|
+
# This method will leave the original object intact and return a new
|
281
|
+
# canvas.
|
259
282
|
#
|
260
283
|
# @return [ChunkyPNG::Canvas] A rotated copy of itself.
|
284
|
+
# @see #rotate_left! for the in-place version.
|
261
285
|
def rotate_left
|
262
286
|
dup.rotate_left!
|
263
287
|
end
|
264
|
-
|
288
|
+
|
265
289
|
# Rotates the image 90 degrees counter-clockwise in place.
|
266
290
|
#
|
267
291
|
# This method will change the original canvas. See {#rotate_left} for a
|
@@ -274,29 +298,32 @@ module ChunkyPNG
|
|
274
298
|
(width - 1).downto(0) { |i| new_pixels += column(i) }
|
275
299
|
replace_canvas!(height, width, new_pixels)
|
276
300
|
end
|
277
|
-
|
301
|
+
|
278
302
|
alias_method :rotate_counter_clockwise, :rotate_left
|
279
303
|
alias_method :rotate_counter_clockwise!, :rotate_left!
|
280
|
-
|
304
|
+
|
281
305
|
# Rotates the image 180 degrees.
|
282
|
-
#
|
306
|
+
#
|
307
|
+
# This method will leave the original object intact and return a new
|
308
|
+
# canvas.
|
283
309
|
#
|
284
310
|
# @return [ChunkyPNG::Canvas] The rotated image.
|
285
311
|
# @see #rotate_180!
|
286
312
|
def rotate_180
|
287
313
|
dup.rotate_180!
|
288
314
|
end
|
289
|
-
|
315
|
+
|
290
316
|
# Rotates the image 180 degrees in place.
|
291
317
|
#
|
292
318
|
# @return [ChunkyPNG::Canvas] Itself, but rotated 180 degrees.
|
293
319
|
# @see #rotate_180
|
294
320
|
def rotate_180!
|
295
321
|
pixels.reverse!
|
296
|
-
|
322
|
+
self
|
297
323
|
end
|
298
|
-
|
299
|
-
# Trims the border around the image, presumed to be the color of the
|
324
|
+
|
325
|
+
# Trims the border around the image, presumed to be the color of the
|
326
|
+
# first pixel.
|
300
327
|
#
|
301
328
|
# @param [Integer] border The color to attempt to trim.
|
302
329
|
# @return [ChunkyPNG::Canvas] The trimmed image.
|
@@ -308,17 +335,18 @@ module ChunkyPNG
|
|
308
335
|
# Trims the border around the image in place.
|
309
336
|
#
|
310
337
|
# @param [Integer] border The color to attempt to trim.
|
311
|
-
# @return [ChunkyPNG::Canvas] Returns itself, but with the border
|
338
|
+
# @return [ChunkyPNG::Canvas] Returns itself, but with the border
|
339
|
+
# trimmed.
|
312
340
|
# @see #trim
|
313
341
|
def trim!(border = pixels.first)
|
314
342
|
x1 = [*0...width].index { |c| column(c).uniq != [border] }
|
315
343
|
x2 = [*0...width].rindex { |c| column(c).uniq != [border] }
|
316
344
|
y1 = [*0...height].index { |r| row(r).uniq != [border] }
|
317
345
|
y2 = [*0...height].rindex { |r| row(r).uniq != [border] }
|
318
|
-
|
346
|
+
|
319
347
|
crop! x1, y1, x2 - x1 + 1, y2 - y1 + 1
|
320
348
|
end
|
321
|
-
|
349
|
+
|
322
350
|
# Draws a border around the image.
|
323
351
|
#
|
324
352
|
# @param [Integer] size The size of the border.
|
@@ -344,16 +372,23 @@ module ChunkyPNG
|
|
344
372
|
end
|
345
373
|
|
346
374
|
protected
|
347
|
-
|
348
|
-
# Checks whether another image has the correct dimension to be used for
|
349
|
-
# on the current image, given an offset coordinate to work
|
375
|
+
|
376
|
+
# Checks whether another image has the correct dimension to be used for
|
377
|
+
# an operation on the current image, given an offset coordinate to work
|
378
|
+
# with.
|
350
379
|
# @param [ChunkyPNG::Canvas] other The other canvas
|
351
|
-
# @param [Integer] offset_x The x offset on which the other image will be
|
352
|
-
#
|
380
|
+
# @param [Integer] offset_x The x offset on which the other image will be
|
381
|
+
# applied.
|
382
|
+
# @param [Integer] offset_y The y offset on which the other image will be
|
383
|
+
# applied.
|
353
384
|
# @raise [ChunkyPNG::OutOfBounds] when the other image doesn't fit.
|
354
385
|
def check_size_constraints!(other, offset_x, offset_y)
|
355
|
-
|
356
|
-
|
386
|
+
if width < other.width + offset_x
|
387
|
+
raise ChunkyPNG::OutOfBounds, 'Background image width is too small!'
|
388
|
+
end
|
389
|
+
if height < other.height + offset_y
|
390
|
+
raise ChunkyPNG::OutOfBounds, 'Background image height is too small!'
|
391
|
+
end
|
357
392
|
end
|
358
393
|
end
|
359
394
|
end
|