Class: Paperclip::Thumbnail

Inherits:
Processor show all
Defined in:
lib/paperclip/thumbnail.rb

Overview

Handles thumbnailing images that are uploaded.

Instance Attribute Summary collapse

Attributes inherited from Processor

#attachment, #file, #options

Instance Method Summary collapse

Methods inherited from Processor

make

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



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/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

Instance Attribute Details

#convert_optionsObject

Returns the value of attribute convert_options.



5
6
7
# File 'lib/paperclip/thumbnail.rb', line 5

def convert_options
  @convert_options
end

#current_geometryObject

Returns the value of attribute current_geometry.



5
6
7
# File 'lib/paperclip/thumbnail.rb', line 5

def current_geometry
  @current_geometry
end

#formatObject

Returns the value of attribute format.



5
6
7
# File 'lib/paperclip/thumbnail.rb', line 5

def format
  @format
end

#source_file_optionsObject

Returns the value of attribute source_file_options.



5
6
7
# File 'lib/paperclip/thumbnail.rb', line 5

def source_file_options
  @source_file_options
end

#target_geometryObject

Returns the value of attribute target_geometry.



5
6
7
# File 'lib/paperclip/thumbnail.rb', line 5

def target_geometry
  @target_geometry
end

#whinyObject

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.

Returns:

  • (Boolean)


40
41
42
# File 'lib/paperclip/thumbnail.rb', line 40

def convert_options?
  !@convert_options.nil? && !@convert_options.empty?
end

#crop?Boolean

Returns true if the target_geometry is meant to crop.

Returns:

  • (Boolean)


35
36
37
# File 'lib/paperclip/thumbnail.rb', line 35

def crop?
  @crop
end

#makeObject

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
# File 'lib/paperclip/thumbnail.rb', line 46

def make
  src = @file
  dst = Tempfile.new([@basename, @format].compact.join("."))
  dst.binmode

  begin
    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

#transformation_commandObject

Returns the command ImageMagick’s convert needs to transform the image into the thumbnail.



70
71
72
73
74
75
76
# File 'lib/paperclip/thumbnail.rb', line 70

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
end