【问题标题】:Image sequence breaks in gif animationgif动画中的图像序列中断
【发布时间】:2015-12-09 02:16:24
【问题描述】:

我正在尝试使用 imagemagick 的 morph 运算符为目录中的所有图像设置动画。我用 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);

【问题讨论】:

    标签: php imagemagick


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2016-05-24
      • 2011-05-22
      • 2021-01-31
      相关资源
      最近更新 更多