imagemagick将gif中的工件留给jpg列表转换

时间:2012-11-10 00:06:47

标签: image-processing imagemagick rmagick

ImageMagick将gif分成jpgs,但其中一些有白色像素,有些则没有。

convert -strip tree.gif tree.jpg

将gif拆分为86 jpgs。这是#68和#69。

#68

enter image description here

和#69

enter image description here

和有问题的GIF:

http://i.stack.imgur.com/yTBnJ.gif

约1/3有类似的编码问题。

convert -version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP   

uname -a
Linux paul-Pangolin-Performance 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:5)

在动画GIF图像中,每个新帧都绘制在前一帧的顶部,这意味着任何与前一帧相同的像素都可以用透明像素表示。 (实际上,这只适用于“Dispose None”动画,但这就是你在这里所拥有的。有关这三种处理方法的详细信息,请参阅here。)

动画GIF优化工具利用这一点,通过查找可以转换为透明的长像素像素(这样可以更有效地压缩它们)。所以,这就是原始图像中可能有透明像素的原因。

当这些帧转换为JPG时,透明像素将转换为背景颜色,白色。

有关如何修复它的说明,请参阅here - 您首先要将“叠加动画”转换为“合并动画”,然后将其转换为一系列JPG文件。看起来应该是这样的:

convert tree.gif -coalesce -set dispose previous tree2.gif

然后验证动画看起来是否相同,然后:

convert -strip tree2.gif tree.jpg

我没有看过从那里链接的gif_anim_montage脚本,它生成了所有漂亮的逐帧图像。我猜它会做同样的事情(加上更多的东西),但也许它有一些巧妙的技巧可以帮助你,所以我看看。

PS,你确定你想要JPG输出而不是PNG,甚至是GIF吗? JPG保证质量下降,而PNG保证不会。并且,考虑到源数据(256色GIF图像),PNG可能至少压缩,甚至更好。一个快速测试显示它是1980K与1916K的默认设置,并且通过一些微不足道的优化,PNG降至1888K。