3

ImageMagick 将 gif 拆分为 jpg,但其中一些具有白色像素,而另一些则没有。

convert -strip tree.gif tree.jpg

将 gif 拆分为 86 个 jpg。这里是#68 和#69。

#68

在此处输入图像描述

和#69

在此处输入图像描述

和有问题的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
4

1 回答 1

7

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

动画 GIF 优化器工具利用了这一点,通过寻找可以转换为透明的长时间运行的像素(因此可以更有效地压缩它们)。所以,这就是为什么原始图像中可能有透明像素的原因。

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

有关如何修复它的说明,请参见此处- 您首先要将“叠加动画”转换为“合并动画”,然后可以将其转换为一系列 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。

于 2012-11-10T00:14:07.737 回答