RMagick用alpha转换图像

问题描述 投票:0回答:1

我正在尝试通过RMagick将图像转换为25%的不透明度。以下内容可从命令行运行,但我不知道如何在Ruby中执行。

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

我曾尝试将Magick::AlphaChannelType::ActivateAlphaChannel弄乱,但不知道如何将命令链接在一起。任何帮助将不胜感激!

rmagick
1个回答
0
投票

请尝试使用此功能解决您的问题

 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 = img.composite(logo_opacity, Magick::NorthWestGravity, 0, 0, Magick::OverCompositeOp)
    end
  end
© www.soinside.com 2019 - 2024. All rights reserved.