gif动画中的图像序列中断

时间:2015-09-12 17:35:21

标签: php imagemagick

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

1 个答案:

答案 0 :(得分:0)

通常,名称的长度保持不变,因此如果您在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