多亏 ImageMagick,最近终于把百科上某个咕了三个多月的页面……的一半……的80%填完了……
真的懒到令自己发指。
嘛,也好久没更新博客了,不能吃灰啊啊啊!
填的坑是神奇宝贝百科里日月的服装样式列表,虽然看上去量很大(仅仅目前填完的女装部分维基代码就有65kB,位列百科第23)实际上在网络上找到了别人整理的简表后,用表格软件通过几个「机械化」的步骤就可以快速转化成维基格式的表格代码,这项工作在开坑后的半个月就基本成型了(当然那段时间也做了别的事……
然后我遇到了一个大问题:服装的图片。
日月继承和发扬了 XY 的服装系统,女装共计70余种,很多服装都有2种版本通用颜色、5种太阳版限定颜色和5种月亮版限定颜色,Serebii.net 提供了大部分通用颜色和月亮版限定颜色的服装截图,共计约300张。但这里提供的图片都是全身图,如果直接放在百科上会变得很难辨认,比如这张:
要死啊,图片宽度是400px,放在百科上缩成64px的话什么都没了啊!
所以有什么办法能裁切,批量裁切,一键裁切……啊?
然后就开始咕咕咕,一咕就咕到2017年。
ImageMagick
寒假咸在家的时候,百科的小伙伴截了一批发型图片让我处理一下上传到百科。他大概是用了截取屏幕上的固定区域的功能,所以要裁切的区域也是一样的。虽然图片很少可以用 Photoshop 一张一张裁,但既然咸在家,而且解决这个问题就能解决服装的大问题,不如查一查好了。
我的目的很简单:批量裁剪图片。
很快,ImageMagick 再次进入了我的视线。之前我用这个工具制作了这个博客的 Favicon,把几张不同大小的图片整合进一张图片,只用了一行命令:
1 | $ convert *.png favicon.ico |
简介
先来介绍一下吧,ImageMagick 是一个基于命令行的、跨平台的位图工具套件,提供了编辑、格式转换、截图、显示图片等很多工具,可以参考官网手册。这里我仅仅使用了convert一个工具。
虽然使用命令行看上去「很落后」也不直观,但在我的需求环境下使用命令行的效率可能反倒比使用 PS 批处理来得高。
安装
官网下载页提供了各个平台的安装方法,我使用的是 macOS,通过命令行的 Homebrew 来安装:
1 | $ brew install imagemagick |
安装好之后别忘了试一下
1 | $ convert |
裁切命令
注:以下命令中花括号{}内的是参数。
1 | $ convert {inputFile} -crop {positionX}x{positionY}+{width}+{heigth} {outputFile} |
参数说明
输入输出文件
inputFile
输入文件名,ImageMagick 会自动判断文件格式。outputFile
输出文件名,ImageMagick 也会自动判断文件格式。
裁切位置
positionX
裁切区域左上角相对于图片左上角的横向位置(像素)positionY
裁切区域左上角相对于图片左上角的纵向位置(像素)
裁切区域大小
width
宽度(像素)heigth
宽度(像素)
比如:
1 | $ convert 001.png -crop 152x72+96+96 crop-001.png |
就是正好将 3DS 上屏截图中部96x96的部分裁切下来。
批处理
ImageMagick 的一行命令就完成了裁切,但我还想要批量裁切,它提供了输入文件名的格式化以便批处理,比如*.png;还提供了文件名指引(Filename References),可以从文本文件里获取列表,比如创建一个文本文件list.txt,内容是:
1 | 001.png |
只要运行
1 | convert @list.txt fin.gif |
即可生成 GIF 文件。
然而,然而,然而,ImageMagick 似乎不支持批处理覆盖原文件,这个时候可以通过 Shell 脚本来实现:
1 | for file in *.png; do |
如果写进一行的话,运行的时候只要按上再回车就好了吧:
1 | for file in *.png; do convert $file -crop 152x72+96+96 $file; done |
就靠着这一行命令,我一晚上肝了200多张图……当然,上衣、下装、鞋子袜子什么的大小和位置需要调整,不过已经比我想象中的轻松多了。
那啥,我也不懂 Shell 脚本,似乎还可以做得复杂一些,利用循环语句从一张大图上裁取多个位置什么的,比如从一张名单图片上裁下每个人的照片之类的(只要位置、大小可以算出来)。