RMagick在保存gif时失去透明度



我正试图用RMagick编写一个批量处理图像的Ruby脚本。但是当我使用例如这段代码时:

img = ImageList.new('in.gif').first
pixels = img.get_pixels(0,0,img.columns,img.rows)
img.store_pixels(0,0, img.columns, img.rows, pixels)
img.write('out.gif');

我希望我的图像保持不变,但它失去了它的透明度,变成黑色。我如何正确地处理gif与透明度与RMagick?

编辑:这是我的图像:https://i.stack.imgur.com/9lPWn.gif

如果有用,我使用的版本是:Rmagick gem - 2.13.2Ruby - 2.1.2ImageMagick 6.7.7-10Ubuntu 13.10

EDIT2:我发现并不是所有的图片都是这样的而是这张图片和其他小尺寸的图片。也许是处理小礼物出了问题?

我不能用你发布的代码复制这一点。您是否尝试过单独运行它?无论如何,你应该可以这样重写默认的背景色:

img.background_color = 'transparent'

完整代码:

img = ImageList.new('in.gif').first
img.background_color = 'transparent'
pixels = img.get_pixels(0,0,img.columns,img.rows)
img.store_pixels(0,0, img.columns, img.rows, pixels)
img.write('out.gif')

你也可以尝试在ImageList上重写它:

img_list = ImageList.new('in.gif')
img_list.background_color = 'transparent'
img = img_list.first
pixels = img.get_pixels(0,0,img.columns,img.rows)
img.store_pixels(0,0, img.columns, img.rows, pixels)
img.write('out.gif')

看起来这真的是ImageMagick本身的一个bug。我不知道它是否在6.8中固定,对我来说更容易将我的图像转换为png。对于png,它工作得很好。

最新更新