ImageMagick:GIF 到精灵表 - 每隔一帧都是空的

ImageMagick:GIF 到精灵表 - 每隔一帧都是空的

我正在尝试使用 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

相关内容