Class: Paperclip::OffsetThumbnail
- Inherits:
-
Processor
- Object
- Processor
- Paperclip::OffsetThumbnail
- Defined in:
- lib/paperclip_processors/offset_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.
-
#crop_and_offset ⇒ Object
Returns the value of attribute crop_and_offset.
-
#current_geometry ⇒ Object
Returns the value of attribute current_geometry.
-
#format ⇒ Object
Returns the value of attribute format.
-
#scale ⇒ Object
Returns the value of attribute scale.
-
#target_geometry ⇒ Object
Returns the value of attribute target_geometry.
-
#whiny ⇒ Object
Returns the value of attribute whiny.
Instance Method Summary collapse
-
#initialize(file, options = {}, attachment = nil) ⇒ OffsetThumbnail
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.
Constructor Details
#initialize(file, options = {}, attachment = nil) ⇒ OffsetThumbnail
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
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 27 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) @whiny = [:whiny].nil? ? true : [:whiny] @format = [:format] @animated = [:animated].nil? ? true : [:animated] @scale = [:scale] @crop_and_offset = [:crop_and_offset] @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_processors/offset_thumbnail.rb', line 5 def animated @animated end |
#crop_and_offset ⇒ Object
Returns the value of attribute crop_and_offset.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def crop_and_offset @crop_and_offset end |
#current_geometry ⇒ Object
Returns the value of attribute current_geometry.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def current_geometry @current_geometry end |
#format ⇒ Object
Returns the value of attribute format.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def format @format end |
#scale ⇒ Object
Returns the value of attribute scale.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def scale @scale end |
#target_geometry ⇒ Object
Returns the value of attribute target_geometry.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def target_geometry @target_geometry end |
#whiny ⇒ Object
Returns the value of attribute whiny.
5 6 7 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 5 def whiny @whiny end |
Instance Method Details
#make ⇒ Object
Performs the conversion of the file
into a thumbnail. Returns the Tempfile that contains the new image.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 46 def make src = @file dst = Tempfile.new([@basename, @format ? ".#{@format}" : '']) dst.binmode begin parameters = [] parameters << ":source" parameters << transformation_command 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}: #{e}" if @whiny rescue Cocaine::CommandNotFoundError => e raise Paperclip::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.
71 72 73 74 75 76 77 |
# File 'lib/paperclip_processors/offset_thumbnail.rb', line 71 def transformation_command trans = [] trans << "-coalesce" if animated? trans << "-resize" << %["#{scale}"] unless scale.nil? || scale.empty? trans << "-crop" << %["#{crop_and_offset}"] << "+repage" trans end |