Class: Fleximage::Operator::Resize
- Defined in:
- lib/fleximage/operator/resize.rb
Overview
Resize this image, constraining proportions. Options allow cropping, stretching, upsampling and padding.
image.resize(size, = {})
size
is size of the output image after the resize operation. Accepts either '123x456'
format or [123, 456]
format.
Use the following keys in the options
hash:
-
crop
: pass true to this option to make the ouput image exactly the same dimensions assize
. The default behaviour will resize the image without cropping any part meaning the image will be no bigger than thesize
. When:crop
is true the final image is resized to fit as much as possible in the frame, and then crops it to make it exactly the dimensions declared by thesize
argument. -
upsample
: By default the image will never display larger than its original dimensions, no matter how large thesize
argument is. Passtrue
to use this option to allow upsampling, disabling the default behaviour. -
padding
: This option will pad the space around your image with a solid color to make it exactly the requested size. Passtrue
, for the default ofwhite
, or give it a text or pixel color like"red"
orcolor(255, 127, 0)
. This is like the opposite of thecrop
option. Instead of trimming the image to make it exactly the requested size, it will make sure the entire image is visible, but adds space around the edges to make it the right dimensions. -
stretch
: Set this option to true and the image will not preserve its aspect ratio. The final image will stretch to fit the requestedsize
. The resulting image is exactly the size you ask for.
Example:
@photo.operate do |image|
image.resize '200x200', :crop => true
end
Instance Method Summary collapse
Methods inherited from Base
#color, color, #execute, #initialize, #scale, #scale_and_crop, size_to_xy, #size_to_xy, #stretch, #symbol_to_blending_mode, #symbol_to_gravity
Constructor Details
This class inherits a constructor from Fleximage::Operator::Base
Instance Method Details
#operate(size, options = {}) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/fleximage/operator/resize.rb', line 39 def operate(size, = {}) = .symbolize_keys # Find dimensions x, y = size_to_xy(size) # prevent upscaling unless :usample param exists. unless [:upsample] x = @image.columns if x > @image.columns y = @image.rows if y > @image.rows end # Perform image resize case when [:crop] && ![:crop].is_a?(Hash) && @image.respond_to?(:crop_resized!) # perform resize and crop scale_and_crop([x, y]) when [:stretch] # stretch the image, ignoring aspect ratio stretch([x, y]) else # perform the resize without crop scale([x, y]) end # apply padding if necesary if padding_color = [:padding] # get color padding_color = 'white' if padding_color == true # get original x and y. This makes it play nice if the requested size is larger # than the image and upsampling is not allowed. x, y = size_to_xy(size) # get proper border sizes x_border = [0, (x - @image.columns + 1) / 2].max y_border = [0, (y - @image.rows + 1) / 2].max # apply padding @image.border!(x_border, y_border, padding_color) # crop to remove possible extra pixel @image.crop!(0, 0, x, y, true) end return @image end |