gif动画中的图像序列中断


Image sequence breaks in gif animation

我试图用imagemagick的变形操作符动画目录中的所有图像。我用PHP的exec命令调用命令行参数。这些图像拥有一个特定的文件名,比如000000.jpg、000001.jpg、000002.jpg、000003.jpg等等。

下面的代码从图像序列000000.jpg到000009.jpg工作得很好,但是当我有像0000010.jpg这样的图像时,0000010.jpg在000001.jpg之后,而我想000002.jpg应该在000001.jpg之后。你能指出如何修改代码,让我可以保留一个序列在gif动画?

$command = "convert -set delay 5 -loop 0 $img_dir/00000*.jpg -morph 10 $img_dir/morph.gif";
exec($command);

通常情况下,名称的长度是保持不变的,所以如果您在从9到10的数字中添加了一个额外的数字,您将删除一个前导零以保持长度不变。我的意思是,大多数人都这样做:

000008
000009
000010
000011

而你似乎已经这样做了,长度在10改变:

000008
000009
0000010
0000011

我建议你修改生成命名的程序,让它生成一个常数长度的名字,然后一切都会正常工作。

如果做不到这一点,如果您希望或不得不坚持您的命名系统,ImageMagick将接受您喜欢的任何顺序的文件列表,因此您可以创建一个名为filelist.txt或诸如此类的文件,其内容如下

000000.jpg
000001.jpg
000002.jpg
...
000009.jpg
0000010.jpg
0000011.jpg

,并像这样使用:

convert -delay 100 -loop 0 @filelist.txt anim.gif

或者,您可以使用以下命令让bash始终以5个前导空格打印文件名:

printf "00000%d.jpg " {0..4}
000000.jpg 000001.jpg 000002.jpg 000003.jpg 000004.jpg

并嵌入到你的ImageMagick命令

convert -delay 100 -loop 0 $(printf "00000%d.jpg " {0..4}) anim.gif