保存GIF时,RMagick失去了透明度

时间:2014-06-15 12:42:51

标签: ruby image-processing imagemagick rmagick

我试图使用RMagick批量处理图像。但是当我用它来代替这个代码时:

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');

我希望我的图像保持不变,但它会失去它的transperency将其变成黑色。如何使用RMagick正确处理透明度的GIF?

编辑: 这是我的形象: http://i.imgur.com/uYL6vAR.gif

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

EDIT2: 我发现这对我的所有图像实际上都不会发生,而是对于那个确切的图像和其他这么小的图像。处理小GIF可能有问题吗?

2 个答案:

答案 0 :(得分:0)

我无法仅使用您发布的代码重现此内容。你有没有尝试过孤立地运行它?无论如何,您应该能够以这种方式覆盖默认背景颜色:

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')

答案 1 :(得分:0)

看起来它确实是ImageMagick本身的一个错误。我不知道它是否在6.8中修复,我更容易将我的图像转换为png。用png它工作正常。该错误与编辑具有透明度的16x16 gif图像有关。