lib/paperclip/thumbnail.rb in thoughtbot-paperclip-2.3.0 vs lib/paperclip/thumbnail.rb in thoughtbot-paperclip-2.3.1
- old
+ new
@@ -1,50 +1,52 @@
module Paperclip
# Handles thumbnailing images that are uploaded.
class Thumbnail < Processor
- attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options
+ attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options, :source_file_options
# 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
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
- @convert_options = options[:convert_options]
- @whiny = options[:whiny].nil? ? true : options[:whiny]
- @format = options[:format]
+ 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]
- @current_format = File.extname(@file.path)
- @basename = File.basename(@file.path, @current_format)
+ @current_format = File.extname(@file.path)
+ @basename = File.basename(@file.path, @current_format)
end
# Returns true if the +target_geometry+ is meant to crop.
def crop?
@crop
end
# Returns true if the image is meant to make use of additional convert options.
def convert_options?
- not @convert_options.blank?
+ !@convert_options.nil? && !@convert_options.empty?
end
# Performs the conversion of the +file+ into a thumbnail. Returns the Tempfile
# that contains the new image.
def make
src = @file
dst = Tempfile.new([@basename, @format].compact.join("."))
dst.binmode
command = <<-end_command
+ #{ source_file_options }
"#{ File.expand_path(src.path) }[0]"
#{ transformation_command }
"#{ File.expand_path(dst.path) }"
end_command
@@ -59,10 +61,11 @@
# Returns the command ImageMagick's +convert+ needs to transform the image
# into the thumbnail.
def transformation_command
scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
- trans = "-resize \"#{scale}\""
+ trans = ""
+ trans << " -resize \"#{scale}\"" unless scale.nil? || scale.empty?
trans << " -crop \"#{crop}\" +repage" if crop
trans << " #{convert_options}" if convert_options?
trans
end
end