首页 > 解决方案 > 如何从多个 png 图像创建动画 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 张图像。然后根据“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

是我得到的结果。这是我使用的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

标签: bashimage-processingimagemagickgifanimated-gif

解决方案


我猜你想要类似下面的东西。我避免将所有 100 个中间文件写入磁盘,而是以流格式(MIFFMagick 图像文件格式)将它们写入最终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

在此处输入图像描述


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

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


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


推荐阅读