从某网站上偷来的表情包默认是 apng 格式,想在 QQ 里用的话默认支持非常差,一方面 iPhone 发送 apng 图片会直接变成静态,另一方面即使是支持 apng 的设备,这些图片循环次数并不是无限。所以怎么都需要修改。
很多不知名小公司做的软件,付费或广告,且功能不全,总感觉没法按照自己的想法处理。直接用 ImageMagick 这个开源工具来处理,而且涉及到各种参数微调的时候,个人感觉输入文本命令比 GUI 来得直观可控得多。
本文发布在 qiita/hatenablog。现修改后转载在自己的 blog(并方便存档)。
静态 PNG 图片
去除 png 图片的透明背景(转换为白色)
|
|
注:mogrify 为覆盖(但后缀名不同仍然无法覆盖),convert 为输出新文件
动态 PNG 图片转换为 GIF
一键指令
|
|
拆解:
- -formart gif:转换为 gif 格式
- -set dispose Previous 重置 dispose 选项,并设置为“Previoius”模式,详细看这里ImageMagick (legacy) – 命令行选项
- -layers coalesce 让 gif 变成类似胶片的模式,虽然没看懂但是……加了这个之后突然就好了,说明在这里 ImageMagick (legacy) – 命令行选项
- -loop 0 :修改循环次数为无限
- apng: :动态 png 强制以 apng 格式读取,否则将认作静态 png 处理
批量处理
本来想用 shell,后来发现想要做的循环和判断几乎可以在一行里解决。 由于忘了当时我用的是 powershell 还是 wsl,后面再补充保存为批处理文件的方法。 那么先上一行流。
|
|
拆解
- ls ./apng 打印目录下文件
- awk -F “.png” ‘{print $1}’:以.png 为分隔符切割前一步输出,并打印第一个区块(这里顺便起到了 grep 的作用,但是总感觉可以用 ls 解决……)
- xargs -I {}:将前文输出内容多次使用 例如后面 ./apng/{}.png ./gif/{}.gif,就使用了文件名两次,来分别制定原文件名和输出文件名。
想要保存下来一键执行
微软辛辛苦苦开发了 powershell,那当然是想用 powershell 对应的 ps1 来执行了。但是 ps1 默认需要右键执行,分享给小白难免会有“这怎么用”的问题。
于是在不考虑执行效率和优雅程度,同时为了利用 powershell 一些方便的指令,单纯为了强行把他变成大家都熟悉的.bat 格式,可以这么写指令。
|
|
引号内部替换为想执行的 powershell 指令即可。
这里的示例是在资源管理器中打开粘贴板中的文件目录。
因为某些奇怪的原因现在用得非常多。
参考
ImageMagick – Command-line Tools: Mogrify
为什么有的 GIF 图片只会播放一遍,而有的会重复播放?关于 gif 你想知道的一切! - 轻狂书生 han - 博客园