gpt4 book ai didi

ruby - Rmagick 在具有透明度的水印中设置不透明度

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:54 25 4
gpt4 key购买 nike

我正在尝试创建具有不同不透明度值(从 0 不透明值到 1 完全透明)的水印。

我在 ruby​​ 中有以下 RMagick 方法:

  # 0 = opaque (Magick::OpaqueOpacity) 1= transparent (Magick::TransparentOpacity)
def watermark(opacity = 0.99, size = 'm')
manipulate! do |img|
logo = Magick::Image.read("#{Rails.root}/app/assets/images/watermark#{size}.png").first
logo.alpha(Magick::ActivateAlphaChannel)
logo.opacity = (1 - opacity.to_f) * Magick::QuantumRange
img.alpha(Magick::ActivateAlphaChannel)
img = img.composite(logo, Magick::NorthWestGravity, 0, 0, Magick::OverCompositeOp)
end
end

我的问题是它似乎可以工作,但是复合模式或 alpha 复合或设置不透明度或 alpha 都失败了,因为我在图像中得到了黑色透明度。例如,如果我的水印是一个带有文本的完全透明图像,我把它放在汽车图像上,然后我得到一个带有水印的更暗或夜间图像,所以水印的背景没有正确混合。

有什么建议可以正确设置水印图像的不透明度吗?也许有什么方法可以消除水印?

编辑:添加图像示例:

http://uppix.com/f-watermarkg53925b100016ab8e.png (水印) http://oi62.tinypic.com/2us8rxl.jpg (基本图像) http://oi60.tinypic.com/2pt6mg3.jpg (作文)

最佳答案

感谢 Neil Slater,我终于找到了正确的解决方案。我需要 composite operation 的组合DstIn + Over 在我的最终结果中:

  def watermark(opacity = 0.99, size = 'm')
manipulate! do |img|
logo = Magick::Image.read("#{Rails.root}/app/assets/images/watermark#{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

关于ruby - Rmagick 在具有透明度的水印中设置不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com