前言
前段时间一直在搞图形处理的研究,以前以为 Qt 框架的图像处理很强大,可以解决很多 Maya 处理图像的问题。
但是自从认识了 ImageMagick 这款命令行处理工具之后,我才知道什么是小巫见大巫。
ImageMagick 是个纯命令行开源图形处理工具,有服务器 PS 的美誉,用 C & C++ 语言编写,有多核性能的优化,扩展性非常强。
最让我赞叹的是 ImageMagick 支持 PSD 等多种不同图片的格式,图片处理的功能内置形态学 API ,甚至可以自定义处理核函数,处理功能远在 Qt 框架之上。
另外 Maya & PS 都内置了 imconvert.exe & convert.exe 可以直接调用。
最新版本的 ImageMagick 甚至集成了 ffmpeg 视频处理功能,只可惜太大了,失去了老版本的精致小巧。
Maya 的 imconvert 版本比较老,但是胜在大小不到 10 M 非常小巧,依然能够满足大多数的应用场景。
文档使用
https://legacy.imagemagick.org/Usage/
PS & Maya 处理
PS 自带 convert.exe
Maya 自带 imconvert.exe
都在启动软件的目录里面可以找到,然而 Maya 的版本虽然比 PS 的老,但是处理渐变的效果比 PS 的要好很多。
参数详解
+dither 参数
https://legacy.imagemagick.org/Usage/quantize/#intro
1 | convert colorwheel.png -colors 32 color_quantize.gif |
1 | convert colorwheel.png +dither -colors 32 color_quantize.gif |
使用案例剖析
官方提供两个大佬 的 案例&脚本
http://www.fmwconcepts.com/imagemagick/
https://im.snibgo.com/
缩略图处理
https://www.jianshu.com/p/9c7d53055adf
图片大小获取
1 | convert input.png ^ |
这个支持绝大多数的图片格式(包括 psd 格式),比起 Qt 的 QImage 还好
-flatter 可以将 psd 图层压缩到一层,否则会获取每个图层的大小信息 链接
Python 通过 subprocess.check_output 方法可以直接获取命令行的输出。
抗锯齿 半透明边缘 剔除
https://legacy.imagemagick.org/Usage/formats/#boolean_trans
1 | convert input.png ^ |
使用 -channel A -threshold 1%
可以将大于 50% 半透的 转为 完全透明
可以剔除 anti-alias 引入的半透边缘
主颜色提取
https://legacy.imagemagick.org/discourse-server/viewtopic.php?t=28963
1 | convert input.png ^ |
+dither 去除杂色
-alpha off 关闭透明通道
-colors 16 提取主要的 16 种颜色
输出会以命令行的方式输出