合并一个图像而不是另一个图像时,RMagick透明度不起作用

时间:2012-09-05 15:17:38

标签: ruby image imagemagick rmagick

在下面的代码中,我试图在一些山脉的图像上覆盖一个透明的方块。我认为它会起作用,但通过设置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')

这是我的输出图片:

output with none transparent black square

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

编辑2:这在Heroku上工作正常!但不是在我的机器上。 Heroku具有相同版本的ImageMagick。奇怪:|

1 个答案:

答案 0 :(得分:3)

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

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