class Imagetools::Imageresizer

Public Class Methods

get_image_files(argv) click to toggle source
# File lib/imagetools/imageresizer.rb, line 34
def self.get_image_files(argv)
  image_files = []
  argv.each do |arg|
    arg = File.expand_path(arg)
    if FileTest.file?(arg) && (arg =~ /\.jpe?g$/i || arg =~ /\.png/i)
      image_files << arg
    end        
  end
  image_files
end
new(opts) click to toggle source
# File lib/imagetools/imageresizer.rb, line 45
def initialize(opts)
  @opts = opts
end
run(argv) click to toggle source
# File lib/imagetools/imageresizer.rb, line 9
def self.run(argv)
  STDOUT.sync = true
  opts = {}
  opt = OptionParser.new(argv)
  opt.banner = "Usage: #{opt.program_name} [-h|--help] <args>"
  opt.version = VERSION
  opt.separator('')      
  opt.separator("Options:")
  opt.on_head('-h', '--help', 'Show this message') do |v|
    puts opt.help
    exit
  end
  opt.on('-v', '--verbose', 'Verbose message') {|v| opts[:v] = v}
  opt.on('--dry-run', 'Message only') {|v| opts[:dry_run] = v}
  opt.on('-o OUTNAME', '--output=OUTNAME', 'Output file') {|v| opts[:o] = v}      
  opt.parse!(argv)
  image_files = get_image_files(argv)
  if image_files.size < 1
    puts opt.help
    exit                
  end
  command = Imageresizer.new(opts)
  command.run(image_files[0])  
end

Public Instance Methods

run(image_file) click to toggle source
# File lib/imagetools/imageresizer.rb, line 49
def run(image_file)
  imgdata = File.binread(image_file)
  resultdata = center_and_pad(imgdata, 960, 640, 'white', ::Magick::CenterGravity)
  
  outpath = @opts[:o] || 'image.png'
  puts "write to #{outpath}"
  File.binwrite("image.png", resultdata)
end

Private Instance Methods

center_and_pad(imgdata, width, height, background=:transparent, gravity=::Magick::CenterGravity) click to toggle source
# File lib/imagetools/imageresizer.rb, line 59
    def center_and_pad(imgdata, width, height, background=:transparent, gravity=::Magick::CenterGravity)
      img = Magick::Image.from_blob(imgdata).first

      img = img.resize_to_fit(600, 600)

      new_img = ::Magick::Image.new(width, height)
      if background == :transparent
        filled = new_img.matte_floodfill(1, 1)
      else
        filled = new_img.color_floodfill(1, 1, ::Magick::Pixel.from_color(background))
      end
      filled.composite!(img, gravity, ::Magick::OverCompositeOp)
    # destroy_image(img)
    # filled = yield(filled) if block_given?
    # filled
#    filled.write new_img_path
      filled.format = "png"
      filled.to_blob
    end