Class: Paperclip::Geometry
- Inherits:
-
Object
- Object
- Paperclip::Geometry
- Defined in:
- lib/paperclip/geometry.rb
Overview
Defines the geometry of an image.
Constant Summary collapse
- EXIF_ROTATED_ORIENTATION_VALUES =
[5, 6, 7, 8]
Instance Attribute Summary collapse
-
#height ⇒ Object
Returns the value of attribute height.
-
#modifier ⇒ Object
Returns the value of attribute modifier.
-
#width ⇒ Object
Returns the value of attribute width.
Class Method Summary collapse
-
.from_file(file) ⇒ Object
Extracts the Geometry from a file (or path to a file).
-
.parse(string) ⇒ Object
Extracts the Geometry from a “WxH,O” string Where W is the width, H is the height, and O is the EXIF orientation.
Instance Method Summary collapse
-
#aspect ⇒ Object
The aspect ratio of the dimensions.
-
#auto_orient ⇒ Object
Swaps the height and width if necessary.
-
#horizontal? ⇒ Boolean
True if the dimensions represent a horizontal rectangle.
-
#initialize(width = nil, height = nil, modifier = nil) ⇒ Geometry
constructor
Gives a Geometry representing the given height and width.
-
#inspect ⇒ Object
Same as to_s.
-
#larger ⇒ Object
Returns the larger of the two dimensions.
-
#resize_to(geometry) ⇒ Object
resize to a new geometry.
-
#smaller ⇒ Object
Returns the smaller of the two dimensions.
-
#square? ⇒ Boolean
True if the dimensions represent a square.
-
#to_s ⇒ Object
Returns the width and height in a format suitable to be passed to Geometry.parse.
-
#transformation_to(dst, crop = false) ⇒ Object
Returns the scaling and cropping geometries (in string-based ImageMagick format) neccessary to transform this Geometry into the Geometry given.
-
#vertical? ⇒ Boolean
True if the dimensions represent a vertical rectangle.
Constructor Details
#initialize(width = nil, height = nil, modifier = nil) ⇒ Geometry
Gives a Geometry representing the given height and width
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/paperclip/geometry.rb', line 10 def initialize(width = nil, height = nil, modifier = nil) if width.is_a?(Hash) = width @height = [:height].to_f @width = [:width].to_f @modifier = [:modifier] @orientation = [:orientation].to_i else @height = height.to_f @width = width.to_f @modifier = modifier end end |
Instance Attribute Details
#height ⇒ Object
Returns the value of attribute height.
5 6 7 |
# File 'lib/paperclip/geometry.rb', line 5 def height @height end |
#modifier ⇒ Object
Returns the value of attribute modifier.
5 6 7 |
# File 'lib/paperclip/geometry.rb', line 5 def modifier @modifier end |
#width ⇒ Object
Returns the value of attribute width.
5 6 7 |
# File 'lib/paperclip/geometry.rb', line 5 def width @width end |
Class Method Details
.from_file(file) ⇒ Object
Extracts the Geometry from a file (or path to a file)
25 26 27 |
# File 'lib/paperclip/geometry.rb', line 25 def self.from_file(file) GeometryDetector.new(file).make end |
.parse(string) ⇒ Object
Extracts the Geometry from a “WxH,O” string Where W is the width, H is the height, and O is the EXIF orientation
32 33 34 |
# File 'lib/paperclip/geometry.rb', line 32 def self.parse(string) GeometryParser.new(string).make end |
Instance Method Details
#aspect ⇒ Object
The aspect ratio of the dimensions.
60 61 62 |
# File 'lib/paperclip/geometry.rb', line 60 def aspect width / height end |
#auto_orient ⇒ Object
Swaps the height and width if necessary
37 38 39 40 41 42 |
# File 'lib/paperclip/geometry.rb', line 37 def auto_orient if EXIF_ROTATED_ORIENTATION_VALUES.include?(@orientation) @height, @width = @width, @height @orientation -= 4 end end |
#horizontal? ⇒ Boolean
True if the dimensions represent a horizontal rectangle
50 51 52 |
# File 'lib/paperclip/geometry.rb', line 50 def horizontal? height < width end |
#inspect ⇒ Object
Same as to_s
84 85 86 |
# File 'lib/paperclip/geometry.rb', line 84 def inspect to_s end |
#larger ⇒ Object
Returns the larger of the two dimensions
65 66 67 |
# File 'lib/paperclip/geometry.rb', line 65 def larger [height, width].max end |
#resize_to(geometry) ⇒ Object
resize to a new geometry
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/paperclip/geometry.rb', line 112 def resize_to(geometry) new_geometry = Paperclip::Geometry.parse geometry case new_geometry.modifier when '!', '#' new_geometry when '>' if new_geometry.width >= self.width && new_geometry.height >= self.height self else scale_to new_geometry end when '<' if new_geometry.width <= self.width || new_geometry.height <= self.height self else scale_to new_geometry end else scale_to new_geometry end end |
#smaller ⇒ Object
Returns the smaller of the two dimensions
70 71 72 |
# File 'lib/paperclip/geometry.rb', line 70 def smaller [height, width].min end |
#square? ⇒ Boolean
True if the dimensions represent a square
45 46 47 |
# File 'lib/paperclip/geometry.rb', line 45 def square? height == width end |
#to_s ⇒ Object
Returns the width and height in a format suitable to be passed to Geometry.parse
75 76 77 78 79 80 81 |
# File 'lib/paperclip/geometry.rb', line 75 def to_s s = "" s << width.to_i.to_s if width > 0 s << "x#{height.to_i}" if height > 0 s << modifier.to_s s end |
#transformation_to(dst, crop = false) ⇒ Object
Returns the scaling and cropping geometries (in string-based ImageMagick format) neccessary to transform this Geometry into the Geometry given. If crop is true, then it is assumed the destination Geometry will be the exact final resolution. In this case, the source Geometry is scaled so that an image containing the destination Geometry would be completely filled by the source image, and any overhanging image would be cropped. Useful for square thumbnail images. The cropping is weighted at the center of the Geometry.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/paperclip/geometry.rb', line 95 def transformation_to dst, crop = false if crop ratio = Geometry.new( dst.width / self.width, dst.height / self.height ) scale_geometry, scale = scaling(dst, ratio) crop_geometry = cropping(dst, ratio, scale) else scale_geometry = dst.to_s end [ scale_geometry, crop_geometry ] end |
#vertical? ⇒ Boolean
True if the dimensions represent a vertical rectangle
55 56 57 |
# File 'lib/paperclip/geometry.rb', line 55 def vertical? height > width end |