Search code examples
rmagick

RMagick convert image with alpha


I'm trying to convert an image to 25% opacity via RMagick. The following works from the command line but I can't figure out how to do it in Ruby.

convert input.png -alpha on -channel A -evaluate set 25% +channel output.png

I've tried messing with Magick::AlphaChannelType::ActivateAlphaChannel but can't figure out how to chain the commands together. Any help would be greatly appreciated!


Solution

  • plz try this function to solve your problem

     def watermark(opacity = 0.25, size = 'input')
        manipulate! do |img|
          logo = Magick::Image.read("#{Rails.root}/app/assets/images/{size}.png").first
          logo.alpha(Magick::ActivateAlphaChannel) 
    
          white_canvas = Magick::Image.new(logo.columns, logo.rows) { self.background_color = "none" }
          white_canvas.alpha(Magick::ActivateAlphaChannel)
          white_canvas.opacity = Magick::QuantumRange - (Magick::QuantumRange * opacity)
    
          # Important: DstIn composite operation (white canvas + watermark)
          logo_opacity = logo.composite(white_canvas, Magick::NorthWestGravity, 0, 0, Magick::DstInCompositeOp)
          logo_opacity.alpha(Magick::ActivateAlphaChannel)
    
          # Important: Over composite operation (original image + white canvas watermarked)
          img = logo.composite(logo_opacity, Magick::NorthWestGravity, 0, 0, Magick::OverCompositeOp)
        end
      end