Class: Fleximage::Operator::ImageOverlay
- Defined in:
- lib/fleximage/operator/image_overlay.rb
Overview
Adds an overlay to the base image. It’s useful for things like attaching a logo, watermark, or even a border to the image. It will work best with a 24-bit PNG with alpha channel since it will properly deal with partial transparency.
image.resize(, = {})
image_overlay_path is the path, relative to Rails.root where the image you want superimposed can be found.
Use the following keys in the options hash:
-
size: The size of the overlayed image, as'123x456'or[123, 456].By default the overlay is not resized before compositing. Use this options if you want to resize the overlay, perhaps to have a small logo on thumbnails and a big logo on full size images. Other than just numerical dimensions, the size parameter takes 2 special values :
scale_to_fitand :stretch_to_fit. :scale_to_fitwill make the overlay fit as much as it can inside the image without changing the aspect ratio. :stretch_to_fitwill make the overlay the exact same size as the image but with a distorted aspect ratio to make it fit. :stretch_to_fitis designed to add border to images. -
alignment: A symbol that tells Fleximage where to put the overlay. Can be any of the following::center, :top, :top_right, :right, :bottom_right, :bottom, :bottom_left, :left, :top_left. Default is :center -
offset: the number of pixels to offset the overlay from it’s :alignmentanchor, in'123x456'or[123, 456]format. Useful to give a bit a space between your logo and the edge of the image, for instance. NOTE: Due to some unexpected (buggy?) RMagick behaviour :offsetwill work strangely if :alignmentis set to a non-corner value, such as :topor :center. Using :offsetin these cases will force the overlay into a corner anyway. -
blending: The blending mode governs how the overlay gets composited onto the image. You can get some funky effects with modes like :copy_cyanor :screen. For a full list of blending modes checkout the RMagick documentation (www.simplesystems.org/RMagick/doc/constants.html#CompositeOperator). To use a blend mode remove theCompositeOpform the name and “unserscorize” the rest. For instance,MultiplyCompositeOpbecomes :multiply, andCopyBlackCompositeOpbecomes :copy_black.
Example:
@photo.operate do |image|
image.('images/my_logo_with_alpha.png',
:size => '25x25',
:alignment => :top_right,
:blending => :screen
)
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(image_overlay_path, options = {}) ⇒ Object
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 |
# File 'lib/fleximage/operator/image_overlay.rb', line 52 def operate(, = {}) = .symbolize_keys #load overlay = Magick::Image.read().first #resize overlay if [:size] if [:size] == :scale_to_fit || [:size] == :stretch_to_fit x, y = @image.columns, @image.rows else x, y = size_to_xy([:size]) end method = [:size] == :stretch_to_fit ? :stretch : :scale send(method, [x, y], ) end #prepare arguments for composite! args = [] args << #overlay image args << symbol_to_gravity([:alignment] || :center) #gravity args += size_to_xy([:offset]) if [:offset] #offset args << symbol_to_blending_mode([:blending] || :over) #compositing mode #composite @image.composite!(*args) return @image end |