lib/paperclip/thumbnail.rb in paperclip-2.3.1.1 vs lib/paperclip/thumbnail.rb in paperclip-2.3.2

- old
+ new

@@ -7,32 +7,37 @@ # 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 + # 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 @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 # 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? !@convert_options.nil? && !@convert_options.empty? end @@ -41,33 +46,33 @@ 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 - begin - success = Paperclip.run("convert", command.gsub(/\s+/, " ")) - rescue PaperclipCommandLineError + options = [ + source_file_options, + "#{ File.expand_path(src.path) }[0]", + transformation_command, + convert_options, + "#{ File.expand_path(dst.path) }" + ].flatten.compact + + success = Paperclip.run("convert", *options) + 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. def transformation_command scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) - trans = "" - trans << " -resize \"#{scale}\"" unless scale.nil? || scale.empty? - trans << " -crop \"#{crop}\" +repage" if crop - trans << " #{convert_options}" if convert_options? + trans = [] + trans << "-resize" << scale unless scale.nil? || scale.empty? + trans << "-crop" << crop << "+repage" if crop trans end end end