class TileUp::ImageProcessors::RMagick

Public Class Methods

new(logger) click to toggle source
Calls superclass method TileUp::ImageProcessor::new
# File lib/tileup/image_processors/rmagick.rb, line 5
def initialize logger
  require 'rmagick'
  super(logger)
end

Public Instance Methods

height(image) click to toggle source
# File lib/tileup/image_processors/rmagick.rb, line 14
def height image
  image.rows
end
width(image) click to toggle source
# File lib/tileup/image_processors/rmagick.rb, line 10
def width image
  image.columns
end

Private Instance Methods

crop_and_save_image(image, crop, filename:, extend_crop: false, extend_color: 'none') click to toggle source
# File lib/tileup/image_processors/rmagick.rb, line 31
def crop_and_save_image image, crop, filename:, extend_crop: false, extend_color: 'none'
  cropped_image = image.crop(crop[:x], crop[:y], crop[:width], crop[:height], true)

  # unless told to do otherwise, extend tiles in the last row and column
  # if they do not fill an entire tile width and height.
  needs_extension = cropped_image.columns != crop[:width] || cropped_image.rows != crop[:height]

  if extend_crop && needs_extension
    # defaults to white background color, but transparent is probably
    # a better default for our purposes.
    cropped_image.background_color = extend_color
    # fill to width height, start from top left corner.
    cropped_image = cropped_image.extent(crop[:width], crop[:height], 0, 0)
  end

  logger.verbose "Saving tile: #{crop[:column]}, #{crop[:row]}..."
  cropped_image.write(filename)
  logger.verbose "Saving tile: #{crop[:column]}, #{crop[:row]}... saved"

  true
rescue RuntimeError => e
  logger.error "Failed to crop image: #{e.message}"
  false
end
open_image(image_filename) click to toggle source
# File lib/tileup/image_processors/rmagick.rb, line 20
def open_image(image_filename)
  ::Magick::Image.read(image_filename).first
end
scale_image(image, scale) click to toggle source
# File lib/tileup/image_processors/rmagick.rb, line 24
def scale_image image, scale
  image.scale(scale)
rescue RuntimeError => e
  logger.error "Failed to scale image, are you sure the original image is large enough (#{image.columns} x #{image.rows})?"
  false
end