如何从多个 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
更新 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 个中间文件写入磁盘,而是以流格式(MIFF 或 Magick 图像文件格式)将它们写入最终 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
我有一个图像文件 "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
更新 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 个中间文件写入磁盘,而是以流格式(MIFF 或 Magick 图像文件格式)将它们写入最终 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