很多时候,突然遇到需要拼图或制作动图,这时,为了单纯的做一张效果图,调出各大内存燃烧专具图片处理软件过于繁琐,但专门去下载一个 “一次性” 软件又不那么方便。命令行工具 ImageMagick (IM) 提供了一个集万物于一身的快捷处理方式
动图 Animation
因为学生党,经常会需要给别人发 step by step 教程,这种时候如果截一堆图然后按顺序一张一张发过去,自己麻烦对方看着也麻烦

这时候,把 n 张截图快速的做个动图就显得整洁很多
$ convert -delay 100 -loop 0 第一张.png 第二张.png 第三张.png 第四张.png 动图名字.gif
- -delay 后面的 100 代表的是 1 fps,即每秒一帧
如果想在动图中额外暂停,可以在对应的图片前插入 -delay 100 来实现
$ convert -delay 100 -loop 0 第一张.png -delay 100 第二张.png 第三张.png 第四张.png 动图名字.gif
- 在第二张图之后会额外暂停一秒
‼️注意
- 如果动图没有完成,不要直接生成.gif的文件,在再制作时会出现撞帧的 bug。IM 提供了一个解决方案,可以将动图生成为 IM 的内部格式 .imff
图片大小和格式更改
有时候手上有一张 .png,但因为上传大小受限,.jpg 可能是更好的选择,这时可以选择用把图片转换格式
magick convert 图片.png 输出的图片.jpg
如果转成 .jpg 大小还不够,可以顺手再把图片分辨率也砍一下
magick convert 图片.png -resize 50% 输出的图片.jpg
- 输出一张长宽像素数都是原图一半的图
magick convert 图片.png -resize 100x 输出的图片.jpg
- 输出一张长度不变、宽度为 100 像素的图
magick convert 图片.png -resize x100 输出的图片.jpg
- 输出一张宽度不变、长度为 100 像素的图
magick convert 图片.png -resize 100x100 输出的图片.jpg
- 输出一张长宽分别为 100 像素的图
$ convert -crop 想要的宽度x想要的长度+开始的宽度+开始的长度 要剪裁的图.jpg 输出的图.jpg
想要的长宽都可以是像素或者原图尺寸的百分比
拼图:一条指令拼长图
$ convert -append 第一张图.png 第二张图.jpg 成果图名字.jpeg-append是竖向拼图;+append代表横向。支持不同格式图片的拼图,输出的图片也可以自己定义
当然,这种时候因为截图名称的格式问题,手打名字很不方便,整理提供两种解决方案
- 最简单的是把文件通过 Finder 直接拖拽到 Terminal 窗口中,Terminal 会自动获取路径
- 当然,如果同时合成多张图片的时候,拖拽容易出错,这时多选文件之后右键 > 重命名多个项目 > 格式,快速批量重命名
- 同样,如果蕾丝操作内容比较多,可以借用一个简单的 Automator Quick Action 重命名一下文档
- 操作方式参考@Minja 文件批量重命名终极解决方案
- 这里有一个现成的 Quick Action,命名结果是 F01 F02 F03……可以在 Automator 中修改格式
‼️注意
- append 拼图只有单纯的拼接功能,对不同大小 / 分辨率的图片无能为力
叠图:加上水印
偶尔需要叠加一个水印,但等打开 Photoshop,叠加一张水印,再导出到 .png
$ magick composite -gravity center 叠印上的图.png rose: 底图.pngcenter 代表叠印的图片将叠加在图片正中间 left 和 right 可以将图片叠在两侧
好玩的小功能:加密
$ magick 要加密的.png -encipher 密码文件.txt 加密后输出的名字.png
这段命令会把 要加密的.png 通过 密码文件.text 制作一张加密图,图片将由根据图片和文件组合生成的噪点代替
$ magick 加密后输出的名字.png -decipher 密码文件.txt 解密后输出的名字.png
上面的这张图会通过密码文件和噪点图复原原图,再把这张图输出
‼️注意
- 要保存好加密文件,一旦文件丢失,图片就再也恢复不了啦
- 密码文件.txt 可以通过另一张图片 密钥图片.png 来代替,即用另一张图片来加密这张图片
- 文件的 Metadata 会被保留,如编辑信息等,这个功能只单纯的更改图片的像素排列
最后
文中简述了 5 种日常会用到的功能,而在 IM 的官网上提供了 34 类不同的命令,包括许多进阶的操作,感兴趣的同学可以仔细研究
‼️所有这些功能都是在图片编辑软件中能完成的操作,本文只是单纯的介绍了一种快速、终端内能完成的解决方式。细节方面指令能做的也有限,如果想要精细的编辑,还是老老实实把内存推起来吧
