class S3Thumbnail::Generation

Public Class Methods

new(input_file) click to toggle source
# File lib/s3_thumbnail/generation.rb, line 5
def initialize(input_file)
  @input_file = input_file
end

Public Instance Methods

write(output_file, width, height, quality) click to toggle source
# File lib/s3_thumbnail/generation.rb, line 9
def write(output_file, width, height, quality)
  resized = resize_with_crop(image, width, height, quality)
  resized.write(output_file.path)
end

Private Instance Methods

image() click to toggle source
# File lib/s3_thumbnail/generation.rb, line 16
def image
  @input_file.rewind
  MiniMagick::Image.read(@input_file).tap do |i|
    i.format('jpg')
  end
end
resize_with_crop(img, width, height, quality) click to toggle source
# File lib/s3_thumbnail/generation.rb, line 23
def resize_with_crop(img, width, height, quality)         
  cols, rows = img[:dimensions]
  img.combine_options do |cmd|
    if width != cols || height != rows
      scale_x = width/cols.to_f
      scale_y = height/rows.to_f
      if scale_x >= scale_y
        cols = (scale_x * (cols + 0.5)).round
        rows = (scale_x * (rows + 0.5)).round
        cmd.resize "#{cols}"
      else
        cols = (scale_y * (cols + 0.5)).round
        rows = (scale_y * (rows + 0.5)).round
        cmd.resize "x#{rows}"
      end
    end
    cmd.quality quality
    cmd.gravity 'Center'
    cmd.background "rgba(255,255,255,0.0)"
    cmd.extent "#{width}x#{height}" if cols != width || rows != height
  end
  img
end