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

2023-05-16

最近需要将几组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上的续行符,代码太长了可以使用续行符进行换行处理

使用上面的命令行做了两组测试

dec0964014cabb257b08812f55e8989c.gif

第一次转换测试 效果还不错~

bcdcc0ba858e84bc426a523b42710a9b.gif

第二次转换测试 就不太理想,gif有明显的重影,在mac上双击gif使用“预览”能查看gif关键帧情况,可以发现第2、第3个关键帧有上一帧的重影

b4acf14b9bedb2ae8ece1a4bf5d5fde5.png

摸索了很久仍然没有解决重影问题,最后转投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}"

771e8d849fc5d2092b5671238964db49.png

-delay 10 可以根据实际情况进行调整,越小播放速度就越快

嗯~ 真 香 !

两组测试用到的图片资源,已分享到百度网盘了

链接:https://pan.baidu.com/s/1zIoFaY08ET7vLGns1N9Elw 密码:l0cv

*图片资源来自某款像素游戏,仅供学习交流使用!

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

希望与广大网友互动??

点此进行留言吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java png转gif_【ImageMagick】png序列转gif(适合处理带透明度的图片) 的相关文章

随机推荐