ImageMagick在将GIF转换为JPG列表时留下了瑕疵。

4

ImageMagick将gif分成了jpg,但有些图片有白色像素,而其他图片则没有。

convert -strip tree.gif tree.jpg

将gif拆分成86个jpg文件,这里是第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

有68个JPG文件,其中一个是第69张吗?是否有一些帧被跳过了? - abarnert
你是否已经安装了GD库?我知道ImageMagick依赖于GD,如果没有安装可能会出现问题。 - user1003932
抱歉,86张JPG而不是68张。已编辑。 - browep
1个回答

8
在动画 GIF 图像中,每个新帧都会在前一个帧的顶部进行绘制,这意味着与前一帧相同的任何像素都可以用透明像素表示。(实际上,这仅适用于“Dispose None”动画,但这就是你在这里的情况。请参见此处详细了解三种处理方法。)
动画 GIF 优化工具利用了这一点,寻找可以转换为透明的长像素运行(这样它们就可以更有效地压缩)。所以,这就是为什么您可能在原始图像中有透明像素的原因。
当那些帧被转换为 JPG 格式时,透明像素就被转换成了背景颜色白色。
请参见此处了解如何修复它 - 您首先需要将您的“叠加动画”转换为“合并动画”,然后您可以将其转换为一系列 JPG 文件。它应该看起来像这样:
convert tree.gif -coalesce -set dispose previous tree2.gif

然后确认动画效果完全相同,接着:
convert -strip tree2.gif tree.jpg

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

顺便问一下,你确定要 JPG 输出而不是 PNG 或 GIF 吗?JPG 保证会失去质量,而 PNG 则保证不会失去质量。而且,鉴于源数据(256色 GIF 图像),PNG 可能会至少与 JPG 一样好甚至更好地压缩。通过快速测试显示,默认设置下 JPG 是1980K,而 PNG 仅为1916K。通过一些微小的优化,PNG 的大小可以减少到1888K。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接