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

时间:2019-06-04 19:54:39

标签: bash image-processing imagemagick gif animated-gif

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

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

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

我检查了较小的图像,它们都很好,并且我还以高速方式对图像进行了幻灯片放映,并向我展示了我期望在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张图像。 然后根据“马克·谢彻尔”的回复,我使用了以下代码:

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

1 个答案:

答案 0 :(得分:1)

我猜您想要类似以下的内容。我避免将所有100个中间文件写入磁盘,而是以流格式( MIFF Magick图像文件格式)将它们写入最终聚集的convert他们全部动画。另一个“技巧” 是将每个图像置于透明背景(-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

enter image description here


请注意,-extent参数确定最终图像的尺寸。如果使范围小于原始图像,则将获得超过1:1全尺寸的缩放比例。我想您大概希望将范围设置为与输入图像完全匹配,那么动画的最后一帧将是完整的,未裁剪的原始图像。但是您现在有了代码,因此请尝试!

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


关键字:ImageMagick,图像,图像处理,缩放,缩小,GIF,动画GIF,命令行