如何从多个 png 图像创建动画 gif 图像?

How to create an animated gif image from a number of png images?

我有一个图像文件 "image.png",我想用它创建一个 .gif 图像。 我写了一个小脚本来获取该图像的 100 个不同大小 (1% - 100%) 的图像,然后我从包含文件夹中删除原始图像 (image.png),并使用此命令生成 gif我想要的图片:

convert -delay 10 -loop 0 *.png image.gif

当我检查 gif 图像时,我可以看到最大的图像(100% 大小)作为静止图片(对我来说),较小的图像开始出现在图像的左上角,从1% - 100%,100% 图像与始终显示的原始图片一致。 在我使用的图像软件 (gthumb) 中,我希望看到图像从 rectangular/square 的中心开始变大,这不是我得到的吗?

我检查了较小的图像,它们很好,我还 运行 高速播放了图像的幻灯片,并向我展示了我希望在我的 gif 文件中包含的内容。我用 Linux.

更新 1: 这是我用来生成 100 张图像的脚本,在 'Mark Setchell' 回复之前:

#!/bin/bash
for i in {1..100};
do
if [ $i -lt 10 ]; then
convert -resize $i% lena.png 00$i.png
elif [ $i -lt 100 ]; then
convert -resize $i% lena.png 0$i.png
else
convert -resize $i% lena.png $i.png
fi
done

产生了 100 张图像。 然后根据 'Mark Setchell' 回复,我使用了这个代码:

for ((i=0;i<100;i++)) ; do
   convert checked-box.png -resize $i% -background none -gravity center -extent 512x512 miff:-
done | convert miff:- -delay 80 anim.gif

here是我得到的结果。 这是我使用的lena.png

更新 2:

我编辑了以下命令来更改输入文件名。

for ((i=0;i<100;i++)) ; do
       convert lena.png -resize $i% -background none -gravity center -extent 512x512 miff:-
    done | convert miff:- -delay 80 anim.gif

我猜您想要以下内容。我避免将所有 100 个中间文件写入磁盘,而是以流格式(MIFFMagick 图像文件格式)将它们写入最终 convert 将它们全部收集起来并制作动画。另一种"trick"是将每张图片居中放置在透明背景上(-background none),使GIF的所有帧大小相同

for ((i=0;i<100;i++)) ; do
   convert lena.png -resize $i% -background none -gravity center -extent 512x512 miff:-
done | convert miff:- -delay 80 anim.gif


请注意,-extent 参数决定了最终图像的尺寸。如果您使范围小于原始图像,您将获得超过 1:1 full-size 的缩放。我猜你 可能 想要设置的范围与你的输入图像完全匹配,那么动画的最后一帧将是完整的、未裁剪的原始图像。但是您现在已经有了代码,所以请进行实验!

请注意,您可以 运行 向后播放动画并创建缩小效果,而不是通过 运行 将循环从 100 向后缩小到 1 或添加 -reverse 进行缩放在 -delay 之前反转帧的顺序。


关键词: ImageMagick, image, 图像处理, zoom, shrink, GIF, animated GIF, command-line