Class: Paperclip::Thumbnail
- Defined in:
- lib/paperclip/thumbnail.rb
Overview
Handles thumbnailing images that are uploaded.
Constant Summary collapse
- ANIMATED_FORMATS =
List of formats that we need to preserve animation
%w(gif)
Instance Attribute Summary collapse
-
#animated ⇒ Object
Returns the value of attribute animated.
-
#convert_options ⇒ Object
Returns the value of attribute convert_options.
-
#current_geometry ⇒ Object
Returns the value of attribute current_geometry.
-
#format ⇒ Object
Returns the value of attribute format.
-
#source_file_options ⇒ Object
Returns the value of attribute source_file_options.
-
#target_geometry ⇒ Object
Returns the value of attribute target_geometry.
-
#whiny ⇒ Object
Returns the value of attribute whiny.
Attributes inherited from Processor
Instance Method Summary collapse
-
#convert_options? ⇒ Boolean
Returns true if the image is meant to make use of additional convert options.
-
#crop? ⇒ Boolean
Returns true if the
target_geometry
is meant to crop. -
#initialize(file, options = {}, attachment = nil) ⇒ Thumbnail
constructor
Creates a Thumbnail object set to work on the
file
given. -
#make ⇒ Object
Performs the conversion of the
file
into a thumbnail. -
#transformation_command ⇒ Object
Returns the command ImageMagick’s
convert
needs to transform the image into the thumbnail.
Methods inherited from Processor
Constructor Details
#initialize(file, options = {}, attachment = nil) ⇒ Thumbnail
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
Options include:
+geometry+ - the desired width and height of the thumbnail (required)
+file_geometry_parser+ - an object with a method named +from_file+ that takes an image file and produces its geometry and a +transformation_to+. Defaults to Paperclip::Geometry
+string_geometry_parser+ - an object with a method named +parse+ that takes a string and produces an object with +width+, +height+, and +to_s+ accessors. Defaults to Paperclip::Geometry
+source_file_options+ - flags passed to the +convert+ command that influence how the source file is read
+convert_options+ - flags passed to the +convert+ command that influence how the image is processed
+whiny+ - whether to raise an error when processing fails. Defaults to true
+format+ - the desired filename extension
+animated+ - whether to merge all the layers in the image. Defaults to true
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/paperclip/thumbnail.rb', line 28 def initialize(file, = {}, = nil) super geometry = [:geometry] # this is not an option @file = file @crop = geometry[-1,1] == '#' @target_geometry = ([:string_geometry_parser] || Geometry).parse(geometry) @current_geometry = ([:file_geometry_parser] || Geometry).from_file(@file) @source_file_options = [:source_file_options] @convert_options = [:convert_options] @whiny = [:whiny].nil? ? true : [:whiny] @format = [:format] @animated = [:animated].nil? ? true : [:animated] @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 |
Instance Attribute Details
#animated ⇒ Object
Returns the value of attribute animated.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def animated @animated end |
#convert_options ⇒ Object
Returns the value of attribute convert_options.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def @convert_options end |
#current_geometry ⇒ Object
Returns the value of attribute current_geometry.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def current_geometry @current_geometry end |
#format ⇒ Object
Returns the value of attribute format.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def format @format end |
#source_file_options ⇒ Object
Returns the value of attribute source_file_options.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def @source_file_options end |
#target_geometry ⇒ Object
Returns the value of attribute target_geometry.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def target_geometry @target_geometry end |
#whiny ⇒ Object
Returns the value of attribute whiny.
5 6 7 |
# File 'lib/paperclip/thumbnail.rb', line 5 def whiny @whiny end |
Instance Method Details
#convert_options? ⇒ Boolean
Returns true if the image is meant to make use of additional convert options.
55 56 57 |
# File 'lib/paperclip/thumbnail.rb', line 55 def !@convert_options.nil? && !@convert_options.empty? end |
#crop? ⇒ Boolean
Returns true if the target_geometry
is meant to crop.
50 51 52 |
# File 'lib/paperclip/thumbnail.rb', line 50 def crop? @crop end |
#make ⇒ Object
Performs the conversion of the file
into a thumbnail. Returns the Tempfile that contains the new image.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/paperclip/thumbnail.rb', line 61 def make src = @file dst = Tempfile.new([@basename, @format ? ".#{@format}" : '']) dst.binmode begin parameters = [] parameters << parameters << ":source" parameters << transformation_command parameters << parameters << ":dest" parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ") success = Paperclip.run("convert", parameters, :source => "#{File.(src.path)}#{'[0]' unless animated?}", :dest => File.(dst.path)) rescue Cocaine::ExitStatusError => e raise Paperclip::Error, "There was an error processing the thumbnail for #{@basename}" if @whiny rescue Cocaine::CommandNotFoundError => e raise Paperclip::Errors::CommandNotFoundError.new("Could not run the `convert` command. Please install ImageMagick.") end dst end |
#transformation_command ⇒ Object
Returns the command ImageMagick’s convert
needs to transform the image into the thumbnail.
88 89 90 91 92 93 94 95 |
# File 'lib/paperclip/thumbnail.rb', line 88 def transformation_command scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) trans = [] trans << "-coalesce" if animated? trans << "-resize" << %["#{scale}"] unless scale.nil? || scale.empty? trans << "-crop" << %["#{crop}"] << "+repage" if crop trans end |