我正在尝试使用 ImageMagick 将 GIF 转换为精灵表序列(.png)。现在我正在使用这两个命令:
convert -layers dispose ezgif.gif tmp.gif
montage tmp.gif -tile x1 -geometry '1x1+0+0<' -alpha On -background 'rgba(0, 0, 0, 0.0)' -quality 100 seq.png
这对于大多数 GIF 都很有效,但是对于这个,却不行。
https://i.projectbea.st/WF2ygx.gif
这里看起来一切正常。但是当我转换它时,你会看到每隔一帧都是空的。
https://i.projectbea.st/pJAlq1.png
为何以及怎样解决它?
答案1
原因很明显,因为原始 gif 图像中的每第二帧都是空的。每个空层都设置为与前一个层合并,而不是替换它,就像 ImageMagick 允许的那样处理命令。您可以使用 Gimp 仔细查看。
要消除空帧,您必须手动或使用脚本进行操作,例如将图像拆分为一系列文件,删除每个第二帧并将它们合并回原始 gif。示例是这里。
编辑: 由于 gif 图像是用户输入的,恐怕没有 100% 可靠的方法可以自动完成此操作。您可以检测框架是否为空(包含单色),但您将有意减少包含单色框架的 gif 图像。此外,可能存在仅添加部分覆盖的单色框架。
这是一个粗略的 bash 脚本,使用来自 imagemagick 的信息删除单色框架确认命令。
#!/bin/bash
convert animation.gif +adjoin tmp_%04d.png
j=0
for i in $(ls tmp_*.png); do
if [ $(identify -verbose $i | grep Colors: | awk '{ print $2; }') != "1" ]; then
cp $i select_$(printf %04d $j).png;
(( j++ ))
fi
done
montage $(ls select_*) -tile x1 -geometry '1x1+0+0<' -alpha On -background 'rgba(0, 0, 0, 0.0)' -quality 100 result.png