Class: Paperclip::Thumbnail

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

Overview

Handles thumbnailing images that are uploaded.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, target_geometry, format = nil, whiny_thumbnails = true) ⇒ 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_thumbnails is true (which it is, by default.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/paperclip/thumbnail.rb', line 12

def initialize file, target_geometry, format = nil, whiny_thumbnails = true
  @file             = file
  @crop             = target_geometry[-1,1] == '#'
  @target_geometry  = Geometry.parse target_geometry
  @current_geometry = Geometry.from_file file
  @whiny_thumbnails = whiny_thumbnails

  @current_format   = File.extname(@file.path)
  @basename         = File.basename(@file.path, @current_format)
  
  @format = format
end

Instance Attribute Details

#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

#fileObject

Returns the value of attribute file.



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

def file
  @file
end

#formatObject

Returns the value of attribute format.



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

def format
  @format
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

#whiny_thumbnailsObject

Returns the value of attribute whiny_thumbnails.



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

def whiny_thumbnails
  @whiny_thumbnails
end

Class Method Details

.make(file, dimensions, format = nil, whiny_thumbnails = true) ⇒ Object

Creates a thumbnail, as specified in initialize, makes it, and returns the resulting Tempfile.



27
28
29
# File 'lib/paperclip/thumbnail.rb', line 27

def self.make file, dimensions, format = nil, whiny_thumbnails = true
  new(file, dimensions, format, whiny_thumbnails).make
end

Instance Method Details

#crop?Boolean

Returns true if the target_geometry is meant to crop.

Returns:

  • (Boolean)


32
33
34
# File 'lib/paperclip/thumbnail.rb', line 32

def crop?
  @crop
end

#makeObject

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



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/paperclip/thumbnail.rb', line 38

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

  command = <<-end_command
    #{ Paperclip.path_for_command('convert') }
    "#{ File.expand_path(src.path) }"
    #{ transformation_command }
    "#{ File.expand_path(dst.path) }"
  end_command
  success = system(command.gsub(/\s+/, " "))

  if success && $?.exitstatus != 0 && @whiny_thumbnails
    raise PaperclipError, "There was an error processing this thumbnail"
  end

  dst
end

#transformation_commandObject

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



60
61
62
63
64
65
# File 'lib/paperclip/thumbnail.rb', line 60

def transformation_command
  scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
  trans = "-scale \"#{scale}\""
  trans << " -crop \"#{crop}\" +repage" if crop
  trans
end