Module: ChunkyPNG::Canvas::Operations
- Included in:
- ChunkyPNG::Canvas
- Defined in:
- lib/chunky_png/canvas/operations.rb
Overview
The ChunkyPNG::Canvas::Operations module defines methods to perform operations on a ChunkyPNG::Canvas. The module is included into the Canvas class so all these methods are available on every canvas.
Note that some of these operations modify the canvas, while some operations return a new canvas and leave the original intact.
Instance Method Summary collapse
-
#compose(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Composes another image onto this image using alpha blending.
-
#compose!(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Composes another image onto this image using alpha blending.
-
#crop(x, y, crop_width, crop_height) ⇒ ChunkyPNG::Canvas
Crops an image, given the coordinates and size of the image that needs to be cut out.
-
#crop!(x, y, crop_width, crop_height) ⇒ ChunkyPNG::Canvas
Crops an image, given the coordinates and size of the image that needs to be cut out.
-
#flip_horizontally ⇒ ChunkyPNG::Canvas
(also: #flip)
Flips the image horizontally, leaving the original intact.
-
#flip_horizontally! ⇒ ChunkyPNG::Canvas
(also: #flip!)
Flips the image horizontally in place.
-
#flip_vertically ⇒ ChunkyPNG::Canvas
(also: #mirror)
Flips the image vertically, leaving the original intact.
-
#flip_vertically! ⇒ ChunkyPNG::Canvas
(also: #mirror!)
Flips the image vertically in place.
-
#grayscale ⇒ ChunkyPNG::Canvas
Converts the canvas to grascale, returning a new canvas.
-
#grayscale! ⇒ ChunkyPNG::Canvas
Converts the canvas to grascale.
-
#replace(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Replaces pixels on this image by pixels from another pixels, on a given offset.
-
#replace!(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Replaces pixels on this image by pixels from another pixels, on a given offset.
-
#rotate_180 ⇒ ChunkyPNG::Canvas
Rotates the image 180 degrees.
-
#rotate_180! ⇒ ChunkyPNG::Canvas
Rotates the image 180 degrees in place.
-
#rotate_left ⇒ ChunkyPNG::Canvas
(also: #rotate_counter_clockwise)
Returns an image that is rotated 90 degrees counter-clockwise.
-
#rotate_left! ⇒ ChunkyPNG::Canvas
(also: #rotate_counter_clockwise!)
Rotates the image 90 degrees counter-clockwise in place.
-
#rotate_right ⇒ ChunkyPNG::Canvas
(also: #rotate_clockwise)
Returns a new canvas instance that is rotated 90 degrees clockwise.
-
#rotate_right! ⇒ ChunkyPNG::Canvas
(also: #rotate_clockwise!)
Rotates the image 90 degrees clockwise in place.
Instance Method Details
#compose(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
API changed since 1.0 - This method now no longer is in place, but returns a new canvas and leaves the original intact. Use #compose! if you want to compose on the canvas in place.
Composes another image onto this image using alpha blending. This will return a new canvas and leave the original intact.
If you simply want to replace pixels or when the other image does not have transparency, it is faster to use #replace.
80 81 82 |
# File 'lib/chunky_png/canvas/operations.rb', line 80 def compose(other, offset_x = 0, offset_y = 0) dup.compose!(other, offset_x, offset_y) end |
#compose!(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Composes another image onto this image using alpha blending. This will modify the current canvas.
If you simply want to replace pixels or when the other image does not have transparency, it is faster to use #replace!.
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/chunky_png/canvas/operations.rb', line 54 def compose!(other, offset_x = 0, offset_y = 0) check_size_constraints!(other, offset_x, offset_y) for y in 0...other.height do for x in 0...other.width do set_pixel(x + offset_x, y + offset_y, ChunkyPNG::Color.compose(other.get_pixel(x, y), get_pixel(x + offset_x, y + offset_y))) end end self end |
#crop(x, y, crop_width, crop_height) ⇒ ChunkyPNG::Canvas
Crops an image, given the coordinates and size of the image that needs to be cut out. This will leave the original image intact and return a new, cropped image with pixels copied from the original image.
139 140 141 |
# File 'lib/chunky_png/canvas/operations.rb', line 139 def crop(x, y, crop_width, crop_height) dup.crop!(x, y, crop_width, crop_height) end |
#crop!(x, y, crop_width, crop_height) ⇒ ChunkyPNG::Canvas
Crops an image, given the coordinates and size of the image that needs to be cut out.
This will change the size and content of the current canvas. Use #crop if you want to have a new canvas returned instead, leaving the current canvas intact.
155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/chunky_png/canvas/operations.rb', line 155 def crop!(x, y, crop_width, crop_height) raise ChunkyPNG::OutOfBounds, "Image width is too small!" if crop_width + x > width raise ChunkyPNG::OutOfBounds, "Image width is too small!" if crop_height + y > height new_pixels = [] for cy in 0...crop_height do new_pixels += pixels.slice((cy + y) * width + x, crop_width) end replace_canvas!(crop_width, crop_height, new_pixels) end |
#flip_horizontally ⇒ ChunkyPNG::Canvas Also known as: flip
Flips the image horizontally, leaving the original intact.
This will flip the image on its horizontal axis, e.g. pixels on the top will now be pixels on the bottom. Chaining this method twice will return the original canvas. This method will leave the original object intact and return a new canvas.
175 176 177 |
# File 'lib/chunky_png/canvas/operations.rb', line 175 def flip_horizontally dup.flip_horizontally! end |
#flip_horizontally! ⇒ ChunkyPNG::Canvas Also known as: flip!
Flips the image horizontally in place.
This will flip the image on its horizontal axis, e.g. pixels on the top will now be pixels on the bottom. Chaining this method twice will return the original canvas. This method will leave the original object intact and return a new canvas.
187 188 189 190 191 192 193 194 195 |
# File 'lib/chunky_png/canvas/operations.rb', line 187 def flip_horizontally! for y in 0..((height - 1) >> 1) do other_y = height - (y + 1) other_row = row(other_y) replace_row!(other_y, row(y)) replace_row!(y, other_row) end return self end |
#flip_vertically ⇒ ChunkyPNG::Canvas Also known as: mirror
Flips the image vertically, leaving the original intact.
This will flip the image on its vertical axis, e.g. pixels on the left will now be pixels on the right. Chaining this method twice will return the original canvas. This method will leave the original object intact and return a new canvas.
208 209 210 |
# File 'lib/chunky_png/canvas/operations.rb', line 208 def flip_vertically dup.flip_vertically! end |
#flip_vertically! ⇒ ChunkyPNG::Canvas Also known as: mirror!
Flips the image vertically in place.
This will flip the image on its vertical axis, e.g. pixels on the left will now be pixels on the right. Chaining this method twice will return the original canvas. This method will leave the original object intact and return a new canvas.
220 221 222 223 224 225 |
# File 'lib/chunky_png/canvas/operations.rb', line 220 def flip_vertically! for y in 0...height do replace_row!(y, row(y).reverse) end return self end |
#grayscale ⇒ ChunkyPNG::Canvas
Converts the canvas to grascale, returning a new canvas.
This method will not modify the canvas. To modift the current canvas, use #grayscale! instead.
35 36 37 |
# File 'lib/chunky_png/canvas/operations.rb', line 35 def grayscale dup.grayscale! end |
#grayscale! ⇒ ChunkyPNG::Canvas
Converts the canvas to grascale.
This method will modify the canvas. The obtain a new canvas and leave the current instance intact, use #grayscale instead.
22 23 24 25 |
# File 'lib/chunky_png/canvas/operations.rb', line 22 def grayscale! pixels.map! { |pixel| ChunkyPNG::Color.to_grayscale(pixel) } return self end |
#replace(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
API changed since 1.0 - This method now no longer is in place, but returns a new canvas and leaves the original intact. Use #replace! if you want to replace pixels on the canvas in place.
Replaces pixels on this image by pixels from another pixels, on a given offset. This method will modify the current canvas.
This will completely replace the pixels of the background image. If you want to blend them with semi-transparent pixels from the foreground image, see #compose!.
124 125 126 |
# File 'lib/chunky_png/canvas/operations.rb', line 124 def replace(other, offset_x = 0, offset_y = 0) dup.replace!(other, offset_x, offset_y) end |
#replace!(other, offset_x = 0, offset_y = 0) ⇒ ChunkyPNG::Canvas
Replaces pixels on this image by pixels from another pixels, on a given offset. This method will modify the current canvas.
This will completely replace the pixels of the background image. If you want to blend them with semi-transparent pixels from the foreground image, see #compose!.
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/chunky_png/canvas/operations.rb', line 98 def replace!(other, offset_x = 0, offset_y = 0) check_size_constraints!(other, offset_x, offset_y) for y in 0...other.height do for d in 0...other.width pixels[(y + offset_y) * width + offset_x + d] = other.pixels[y * other.width + d] end end self end |
#rotate_180 ⇒ ChunkyPNG::Canvas
Rotates the image 180 degrees. This method will leave the original object intact and return a new canvas.
287 288 289 |
# File 'lib/chunky_png/canvas/operations.rb', line 287 def rotate_180 dup.rotate_180! end |
#rotate_180! ⇒ ChunkyPNG::Canvas
Rotates the image 180 degrees in place.
295 296 297 298 |
# File 'lib/chunky_png/canvas/operations.rb', line 295 def rotate_180! pixels.reverse! return self end |
#rotate_left ⇒ ChunkyPNG::Canvas Also known as: rotate_counter_clockwise
Returns an image that is rotated 90 degrees counter-clockwise.
This method will leave the original object intact and return a new canvas. See #rotate_left! for the in place version.
262 263 264 |
# File 'lib/chunky_png/canvas/operations.rb', line 262 def rotate_left dup.rotate_left! end |
#rotate_left! ⇒ ChunkyPNG::Canvas Also known as: rotate_counter_clockwise!
Rotates the image 90 degrees counter-clockwise in place.
This method will change the original canvas. See #rotate_left for a version that leaves the canvas intact and returns a new rotated canvas instead.
273 274 275 276 277 |
# File 'lib/chunky_png/canvas/operations.rb', line 273 def rotate_left! new_pixels = [] (width - 1).downto(0) { |i| new_pixels += column(i) } replace_canvas!(height, width, new_pixels) end |
#rotate_right ⇒ ChunkyPNG::Canvas Also known as: rotate_clockwise
Returns a new canvas instance that is rotated 90 degrees clockwise.
This method will return a new canvas and leaves the original intact. See #rotate_right! for the in place version.
236 237 238 |
# File 'lib/chunky_png/canvas/operations.rb', line 236 def rotate_right dup.rotate_right! end |
#rotate_right! ⇒ ChunkyPNG::Canvas Also known as: rotate_clockwise!
Rotates the image 90 degrees clockwise in place.
This method will change the current canvas. See #rotate_right for a version that leaves th current canvas intact
246 247 248 249 250 251 |
# File 'lib/chunky_png/canvas/operations.rb', line 246 def rotate_right! rotated = self.class.new(height, width) new_pixels = [] 0.upto(width - 1) { |i| new_pixels += column(i).reverse } replace_canvas!(height, width, new_pixels) end |