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
# 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]

  @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)


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

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

#crop?Boolean

Returns true if the target_geometry is meant to crop.

Returns:

  • (Boolean)


30
31
32
# File 'lib/paperclip/thumbnail.rb', line 30

def crop?
  @crop
end

#makeObject

Performs the conversion of the file into a thumbnail. Returns the Tempfile that contains the new image.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/paperclip/thumbnail.rb', line 41

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
    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.



64
65
66
67
68
69
70
71
# File 'lib/paperclip/thumbnail.rb', line 64

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
end