class Paperclip::Thumbnail
Handles thumbnailing images that are uploaded.
Attributes
Public Class Methods
Creates a Thumbnail object set to work on the
file
given. It will attempt to transform the image into one
defined by target_geometry
which is a “WxH”-style string.
format
will be inferred from the file
unless
specified. Thumbnail creation will raise no
errors unless whiny
is true (which it is, by default. If
convert_options
is set, the options will be appended to the
convert command upon image conversion
# File lib/dm-paperclip/thumbnail.rb, line 13 def initialize file, options = {}, attachment = nil super geometry = options[:geometry] @file = file @crop = geometry[-1,1] == '#' @target_geometry = Geometry.parse geometry @current_geometry = Geometry.from_file @file @source_file_options = options[:source_file_options] @convert_options = options[:convert_options] @whiny = options[:whiny].nil? ? true : options[:whiny] @format = options[:format] @source_file_options = @source_file_options.split(/\s+/) if @source_file_options.respond_to?(:split) @convert_options = @convert_options.split(/\s+/) if @convert_options.respond_to?(:split) @current_format = File.extname(@file.path) @basename = File.basename(@file.path, @current_format) end
Public Instance Methods
Returns true if the image is meant to make use of additional convert options.
# File lib/dm-paperclip/thumbnail.rb, line 40 def convert_options? !@convert_options.nil? && !@convert_options.empty? end
Returns true if the target_geometry
is meant to crop.
# File lib/dm-paperclip/thumbnail.rb, line 35 def crop? @crop end
Performs the conversion of the file
into a thumbnail. Returns
the Tempfile that contains the new image.
# File lib/dm-paperclip/thumbnail.rb, line 46 def make src = @file dst = Tempfile.new([@basename, @format ? ".#{@format}" : '']) dst.binmode begin parameters = [] parameters << source_file_options parameters << ":source" parameters << transformation_command parameters << convert_options parameters << ":dest" parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ") success = Paperclip.run("convert", parameters, :source => "#{File.expand_path(src.path)}[0]", :dest => File.expand_path(dst.path)) rescue PaperclipCommandLineError => e raise PaperclipError, "There was an error processing the thumbnail for #{@basename}" if @whiny end dst end
Returns the command ImageMagick's convert
needs to
transform the image into the thumbnail.
# File lib/dm-paperclip/thumbnail.rb, line 71 def transformation_command scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) trans = [] trans << "-resize" << %Q["#{scale}"] unless scale.nil? || scale.empty? trans << "-crop" << %Q["#{crop}"] << "+repage" if crop trans end