欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【ImageMagick】png序列转gif(适合处理带透明度的图片)

程序员文章站 2022-06-24 16:30:39
最近需要将几组png序列转成gif,之前有用过“Ulead GIF Animator” 和 “Photoshop”,这两款软件应该能满足需求!“Ulead GIF Animator”只有windows版,这些年mac是主力机且一直刻意减少使用PS,通过命令行应该有法子可以生成gif?首先想到的是ffmpeg,虽然ffmpeg主要是视频处理,最近发现可以用它来做一些图片处理,例如 png转jpg、gif转png序列、裁切图片等。一般用ffmpeg基本都是截取视频生成gif,gif没有透明度 ffmpeg...

最近需要将几组png序列转成gif,之前有用过“Ulead GIF Animator” 和 “Photoshop”,“Ulead GIF Animator”只有windows版,这些年mac是主力机,一直刻意减少使用PS,通过命令行应该有法子可以生成gif?


首先想到的是ffmpeg,虽然ffmpeg主要是视频处理,最近发现可以用它来做一些图片处理,例如 png转jpg、gif转png序列、裁切图片等。
一般用ffmpeg基本都是截取视频生成gif,gif没有透明度,使用 ffmpeg -i %04d.png merge.gif 这种简单的命令基本就实现了。不过,我的情况有点不一样,png带有透明度,转出来的gif也要求有透明度,摸索了好久,下面的代码解决了早期的问题。

ffmpeg代码

inFile=/Users/hf/Desktop/cmd_gif/case1/pngs/%04d.png
outFile=/Users/hf/Desktop/cmd_gif/case1/merge.gif
ffmpeg -y -i "${inFile}" -r 12 \
-filter_complex "[0:v]split[a][b]; [a]palettegen=transparency_color=ffffff[p]; [b][p]paletteuse" \
"${outFile}"

上面是mac上的终端代码,windows上运行请改成这样

ffmpeg -y -i "d:\case1\pngs\%04d.png" -r 12 ^
-filter_complex "[0:v]split[a][b]; [a]palettegen=transparency_color=ffffff[p]; [b][p]paletteuse" ^
"d:\case1\merge.gif"

-r 表示gif的fps,-r 12,表示gif是12帧每秒
“\”是mac上的续行符,“^”是windows上的续行符,代码太长了可以使用续行符进行换行处理

使用上面的命令行做了两组测试
【ImageMagick】png序列转gif(适合处理带透明度的图片)
第一次转换测试 效果还不错~
【ImageMagick】png序列转gif(适合处理带透明度的图片)
第二次转换测试 就不太理想,gif有明显的重影,在mac上双击gif使用“预览”能查看gif关键帧情况,可以发现第2、第3个关键帧有上一帧的重影
【ImageMagick】png序列转gif(适合处理带透明度的图片)
摸索了很久仍然没有解决重影问题,最后转投ImageMagick~~

inFile=/Users/hf/Desktop/cmd_gif/case2/pngs/*.png
outFile=/Users/hf/Desktop/cmd_gif/case2/merge.gif
convert -delay 10 -loop 0 "${inFile}" -set dispose background +repage "${outFile}"

【ImageMagick】png序列转gif(适合处理带透明度的图片)
-delay 10 可以根据实际情况进行调整,越小播放速度就越快

嗯~ 真 香 !

两组测试用到的图片资源,已分享到百度网盘了
链接:https://pan.baidu.com/s/1zIoFaY08ET7vLGns1N9Elw 密码:l0cv
*图片资源来自某款像素游戏,仅供学习交流使用!

本文地址:https://blog.csdn.net/hufang360/article/details/107291163