【问题标题】:RMagick transparency not working when compositing one image over another将一张图像合成到另一张图像上时,RMagick 透明度不起作用
【发布时间】:2012-09-05 15:17:37
【问题描述】:

在下面的代码中,我试图在一些山脉的图像上覆盖一个透明的正方形。我认为它会起作用,但是通过设置 background_color = 'none' 它不会使图像透明!

结果是左上角的黑色方块 - 所需的结果是黑色方块应该是透明的。

require 'open-uri'
require 'RMagick'

image_url = 'http://farm9.staticflickr.com/8446/7937080514_62d7749860.jpg'

bg = Magick::ImageList.new
open(image_url, 'rb') do |f|
  bg.from_blob(f.read)
end

layer = Magick::Image.new(200, 200) {
  self.background_color = 'none'
}

bg.each do |frame|
  frame.composite!(layer, 0, 0, Magick::OverCompositeOp)
  frame.strip!
end

bg.write('out.jpg')

这是我的输出图像:

编辑:我在 Mac、Lion、ruby 1.9.3p125、ImageMagick 6.7.5-7 上

编辑 2:这在 Heroku 上运行良好!但不在我的机器上。 Heroku 具有相同版本的 ImageMagick。奇怪:|

【问题讨论】:

  • 在 Ubuntu 12.04、Ruby 1.9.3p194、RMagick 2.13.1、ImageMagick 6.6.9-7 上运行良好。
  • 你试过玩layer.opacity吗?
  • 感谢 Lars,调查 layer.opacity 导致发现,奇怪的是,layer.alpha?是假的。我设置了 layer.alpha(Magick::ActivateAlphaChannel) 并且它现在可以工作了:)
  • 可能保存为png 会有所帮助吗?

标签: ruby image imagemagick rmagick


【解决方案1】:

出于某种原因layer.alpha? == false。所以我做了sq.alpha(Magick::ActivateAlphaChannel) 然后它成功了!

参考:http://www.imagemagick.org/RMagick/doc/image1.html#alpha

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2011-01-29
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多