Class Fleximage::Operator::ImageOverlay
In: lib/fleximage/operator/image_overlay.rb
Parent: Operator::Base

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, options = {})

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_fit and :stretch_to_fit. :scale_to_fit will make the overlay fit as much as it can inside the image without changing the aspect ratio. :stretch_to_fit will make the overlay the exact same size as the image but with a distorted aspect ratio to make it fit. :stretch_to_fit is 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 :alignment anchor, 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 :offset will work strangely if :alignment is set to a non-corner value, such as :top or :center. Using :offset in 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_cyan or :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 the CompositeOp form the name and "unserscorize" the rest. For instance, MultiplyCompositeOp becomes :multiply, and CopyBlackCompositeOp becomes :copy_black.

Example:

  @photo.operate do |image|
    image.image_overlay('images/my_logo_with_alpha.png',
      :size => '25x25',
      :alignment => :top_right,
      :blending => :screen
    )
  end

Methods

operate  

Public Instance methods

[Source]

    # File lib/fleximage/operator/image_overlay.rb, line 52
52:       def operate(image_overlay_path, options = {})
53:         options = options.symbolize_keys
54:       
55:         #load overlay
56:         overlay = Magick::Image.read(image_overlay_path).first
57:       
58:         #resize overlay
59:         if options[:size]
60:           if options[:size] == :scale_to_fit || options[:size] == :stretch_to_fit
61:             x, y = @image.columns, @image.rows
62:           else
63:             x, y = size_to_xy(options[:size])
64:           end
65:         
66:           method = options[:size] == :stretch_to_fit ? :stretch : :scale
67:           send(method, [x, y], overlay)
68:         end
69:       
70:         #prepare arguments for composite!
71:         args = []
72:         args << overlay                                               #overlay image
73:         args << GRAVITIES[options[:alignment] || :center]             #gravity
74:         args += size_to_xy(options[:offset]) if options[:offset]      #offset
75:         args << symbol_to_blending_mode(options[:blending] || :over)  #compositing mode
76:         
77:         #composite
78:         @image.composite!(*args)
79:       
80:         return @image
81:       end

[Validate]