class TileUp::ImageProcessors::MiniMagick

Public Class Methods

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

Public Instance Methods

height(image) click to toggle source
# File lib/tileup/image_processors/mini_magick.rb, line 14
def height image
  image.height
end
width(image) click to toggle source
# File lib/tileup/image_processors/mini_magick.rb, line 10
def width image
  image.width
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/mini_magick.rb, line 31
def crop_and_save_image image, crop, filename:, extend_crop: false, extend_color: 'none'
  logger.verbose "Saving tile: #{crop[:column]}, #{crop[:row]}..."

  ::MiniMagick::Tool::Convert.new do |convert|
    convert << mpc(image).path
    convert.merge! ['-crop', "#{crop[:width]}x#{crop[:height]}+#{crop[:x]}+#{crop[:y]}"]

    if extend_crop
      convert.merge! ['-background', extend_color]
      convert.merge! ['-extent', "#{crop[:width]}x#{crop[:height]}"]
    end

    convert << filename
  end

  logger.verbose "Saving tile: #{crop[:column]}, #{crop[:row]}... saved"

  true
rescue RuntimeError => e
  raise e
  logger.error "Failed to crop image: #{e.message}"
  return false
end
mpc(image) click to toggle source
# File lib/tileup/image_processors/mini_magick.rb, line 55
def mpc image
  @mpcs ||= {}
  @mpcs[image] ||= open_image(image.path).format 'mpc'
end
open_image(image_filename) click to toggle source
# File lib/tileup/image_processors/mini_magick.rb, line 20
def open_image(image_filename)
  ::MiniMagick::Image.open(image_filename)
end
scale_image(image, scale) click to toggle source
# File lib/tileup/image_processors/mini_magick.rb, line 24
def scale_image image, scale
  open_image(image.path).resize("#{100.0 * scale}%")
rescue RuntimeError => e
  logger.error "Failed to scale image, are you sure the original image is large enough (#{image.width} x #{image.height})?"
  return false
end