对于多数文章来说,适当的配图是必不可少,尤其是一篇讲解技巧、评测 App 的文章,离开图就很难理解。
统计工作时间时,我也会特意分开记录打字和配图的时长,尽量真实反应自己的工作状态。
10% 的时间在配图
上图是我最近写 Power+ 文章的耗时。尽管我已经用上了各路自动化工具,仍然有 10% 的时间花在配图上。
不难看出,相比文章撰写,配图制作的工作量也不小。编辑部的成员,不仅要处理自己文章的配图,出于网站视觉统一的考虑,还要把投稿1
中的配图修缮一番。
为了给原创性的写作工作腾出更多时间,我一直改进自己的图片处理流程,将其中的机械部分做成自动化动作。一年工作下来,也积累了不少原创小工具:拼接图片、调整尺寸、加阴影、移除信息、转换格式……这些动作,原理上有很多类似之处,又都围绕图片处理这一主题,所以我把它们汇总起来分享给大家。当然,即使你并不常写文章,这些小工具在 PPT 制作、海报编排等工作中也派得上用场。
使用前的准备
我日常用的自动化工具是 LaunchBar,所以本文例图展示的都是 LaunchBar 的场景,不过所有动作都可以移植到 Automator、Alfred、Keyboard Maestro 等其他自动化工具上。
无论下载哪个版本的动作,都需要这两个准备工序:
- 安装 HomeBrew:为方便一会儿装别的第三方图片处理工具。在 Terminal 输入:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - 安装 imagemagick:这是一个免费的命令行图片处理工具,虽然没有图形界面,但也因此可以和各种自动化工具打包在一起批量处理图片,而且相比图形化的工具可拓展性更高,有兴趣的读者可以把动作串联起来使用,或者在处理完图片后进行归档、上传到图床等操作。安装 imagemagick 需在 Terminal 输入
brew install imagemagick
LaunchBar 动作下载后建议重命名文件。为了方便识别,我提供的部分动作可能是中文名的,但你得换一个英文名或拼音名,不然 LaunchBar 无法显示它们。
LaunchBar 动作
Automator 动作下载安装后可以直接在右键菜单中看到。
Automator 动作会出现在右键菜单里
令人宽心的是,这些动作在使用时全程不用打开 Terminal,也用不着输入任何代码。下面我们来看看这些动作是怎样工作的,并重点了解一下我们可以自定义的部分。
拼接图片
拼接图片听起来毫无技术含量,不过大家不妨回忆一下,一般人在 Mac 上是怎么操作的?你可以观察一下身边的人,相信绝大多数都是把几张图片导入 Photoshop,手动对齐,再导出新图片。这一轮操作下来,固然耗时不多,但每天处理十几张配图就能让人怀疑自己的工作意义。机械的事情当然要尽可能交给自动化工具。
在 imagemagick 里,我们可以横向、也能纵向拼接多张图片,并且可以预设间距、背景颜色,免去手动导入、拖拽的麻烦。具体会用到这两条代码:
- 横向拼接:convert 图片1 图片2 图片3 … -background none +append 输出图片
- 纵向拼接:convert 图片1 图片2 图片3 … -background none -append 输出图片
其中 -background none 可能稍有些费解,其实它表示采用透明背景,毕竟实际操作中我们常常遇到需拼接的图片尺寸不同的情况,此时对不齐、多出来的部分若是塞上一块色块就会很难看,用一个透明背景则会让成品图更自然。
拼接效果对比,加工前的色块很碍眼
当然,你不会希望每次都敲一遍命令的,所以了解完 imagemagick 拼接图片的原理后,我们就把命令整合进 LaunchBar。所幸 LaunchBar 对变量的输入输出控制得非常好,我们一次性导入多张图片也没有问题。
PATH=$PATH:/usr/local/bin/
ARG="$1"
ddate=`date +%Y-%m-%d-%H%M%S`
ooutput="${ARG%/*}/concact-$ddate.png"
convert "$@" -background none +append "$ooutput" && afplay "/System/Library/Sounds/Submarine.aiff"
至于纵向拼图的代码,其实只是把 +append 换成 -append,你可以自己完成,这里不重复贴出了。
我对于基础的拼图命令做了点优化,把生成的图片命名为 concact-当前日期时间,避免和原有的文件冲突,并且新图和原图放在同一个文件夹里。另外,在图片处理成功后还会发出提示音,如果你不喜欢听到频繁的通知音,可以直接删除 && afplay "/System/Library/Sounds/Submarine.aiff" 这一部分。
在使用的时候,图片会根据被选中的先后从左到右或从上到下地排布,如果你希望某一张图片排在前面,就先选中它,再点选其他图片。每期编排 Shortcuts Gallery 上新文章时,拼图动作都可以节省我打开专业修图软件的时间。
横向拼接图片
横向/纵向拼图这组动作我用了很久了,也和一些读者分享过,他们发掘出了更多的应用场景。比如 @谭小熊 就反馈过一个意想不到的用法:制作照片墙。
照片墙
这种人头攒动的图大家在各种公益活动上都看过,但你可能不知道,不少主办机构都是一张一张手动拼接的,非常低效;谭小熊则把图片分成几组,横向拼了几行,再纵向拼在一起,几分钟就完成了拼图。看到自己的动作被读者活用,没有什么比这更让制作者开心的。
知识点一
注意脚本第一行:PATH=$PATH:/usr/local/bin/。以后每次使用 imagemagick 时,都会出现这段代码,它的用途是指明第三方命令行工具在电脑里的位置,不然自动化工具就拔剑四顾心茫然,不知道命令位于何处了。
知识点二
想看看一个命令有没有运行成功?那就在它后面加上这一段代码:
&& afplay "/System/Library/Sounds/Submarine.aiff"
&& 表示如果命令运行成功,就运行后面的代码——后面紧跟着的那串代码就是拿来发出提示音的,你可以在 /System/Library/Sounds/ 文件夹里找到自己喜欢的音效替换掉 Submarine。
给截图加阴影
Mac 上的窗口截图自带阴影,看起来比较美观,也能让图片和白色的网页背景区分开来。
适当的阴影可以让图片和背景区分开来
convert 输入的图片路径 \( +clone -background balck -shadow 80x20+0+10 \) +swap -background none -layers merge +repage 输出的图片路径
只需要注意其中 80x20+0+10 这段参数:
- 20:阴影柔软度。数字越大阴影越柔和,一般设置为 10 到 30,和 macOS 原生的截图看起来比较接近,依据喜好你可以自己修改。
- +0+10:阴影位置。上面的代码表示向下移动 10 个单位(0 表示不向右移动),一般不用改。
同样把命令封装成 LaunchBar 动作,下面是代码:
PATH=$PATH:/usr/local/bin/
idx=0
for f in "$@";do
full_name=${f%.*}
extension=${f##*.}
newFile=${full_name}_new.$extension
convert "$f" \( +clone -background black -shadow 50x10+0+10 \) +swap -background none -layers merge +repage "$newFile"
let idx=$idx+1
done && afplay "/System/Library/Sounds/Submarine.aiff"
osascript -e "display notification \"$(echo 修改了 $idx 个文件)\""
又出现了不少和 imagemagick 无关的代码?多出来的部分是为了统计处理了多少图片,并且最后发送通知作为提醒的。
考虑到 imagemagick 的命令是不可撤销的,我提供的动作会生成一个带阴影的新文件,不至于覆盖源文件,给你一剂后悔药。
效果如下:
添加阴影前后对比
知识点三
osascript -e “display notification "$(echo 修改了 $idx 个文件)"”
这段代码是拿来发送系统通知的,方便我们得知 LaunchBar 的处理结果。里面还有一处 $idx,它表示 LaunchBar 动作处理文件的数量,这部分内容超纲较多,也不影响动作的核心功能,以后的文章里我们再讨论。
移除照片 EXIF 信息
这个动作比较简单,就是移除照片的 EXIF 信息(拍摄地点、设备等细信息),一般是出于隐私考虑。
在上传照片之前,我都习惯进行这么一步操作,就和士兵永远会假设枪膛里有子弹一样,我默认所用的照片里都含有 EXIF 信息,一概要处理一下。此时通过 LaunchBar 调用 imagemagick 出来就挺方便,可以不打开任何图片处理工具,原地拔除 EXIF 信息。
移除 EXIF 信息
用到的命令相当简单,仅仅一句 mogrify -strip 图片,打包后代码如下:
PATH=$PATH:/usr/local/bin/
idx=0
for f in "$@";do
mogrify -strip "$f"
let idx=$idx+1
done && afplay "/System/Library/Sounds/Submarine.aiff"
osascript -e "display notification \"$(echo 修改了 $idx 个文件)\""
大家可以试试用到其他自动化工具里面。
批量调整尺寸
现在,来看一个很常见的操作:修改图片尺寸。一般我们会用预览工具打开图片(Photoshop 实在是大动干戈),改一下大小,然后保存。不过每次要很画蛇添足地选一下是否按比例缩放,而且图片一多还容易卡顿。
预览工具不够简洁
老样子,自己动手。查过文档后,我发现 imagemagick 带有一个 convert -resize 命令,可以修改图片尺寸。
convert -resize 尺寸 原图片 新图片
稍作修改,填到 LaunchBar 里去。这里涉及一个输入图片尺寸的问题,想要随时输入尺寸,就要借助一大段 AppleScript 来召唤出系统输入框。好在这部分代码没有什么值得自定义的内容,唯一值得一提的就是默认宽度 900 可以改成别的尺寸。关于 AppleScript,我还会另有专门的系列文章,这里不深究。
read -r -d '' applescriptCode1 <<'EOF'
set imgWidth to text returned of (display dialog "请输入图片宽度" default answer "900")
return imgWidth
EOF
imgWidth=$(osascript -e "$applescriptCode1")
for ARG in "$@"; do
PATH=$PATH:/usr/local/bin/
convert -resize $imgWidth "$ARG" "$ARG"
done && afplay "/System/Library/Sounds/Submarine.aiff"
调整分辨率
对于一些频繁接触的像素尺寸,你还可以做专门的动作。我就搞过一个把图片宽度调成 1440 像素的动作,投过稿的读者可能已经会意:这不就是少数派文章题图的尺寸嘛!
快速把图片宽度调到和少数派题图相符
批量转换格式
上面的动作都用到了 imagemagick,可以说是拓展了 macOS 的图片处理功能。最后一个动作是批量转换图片格式,只用到原生命令,其实是对预览工具、快速查看工具中修图功能的简化,不过同样很泛用,不仅是编排文章,日常发个贴、写个推也能用到。
最常见的转换是把 PNG 转成 JPG,可以压缩一部分体积。而在知乎、微博等服务里,JPG 图片还有避免显示出错的用处:PNG 图片由于带着透明像素——比如截图那一圈儿的阴影——就会被自动加上粗大的黑边(有时甚至直接套上一层绿色),看起来很糟。
在知乎上传 PNG 图片,会被加上黑底(右)
在这类网站和服务里上传图片前,还是自己转换一下格式比较保险。除了 JPG 和 PNG,自己折腾图标、绘制插画时也会遇到 TIFF、ICNS 等格式的图片,如何把它们转换成常用格式也是个问题。于是我做了一个动作,支持把多种图片批量转换成常见的格式(PNG 或 JPG)。其实 Automator 自己也有个图片格式转换功能,我重新做一个主要是为了配合其他自动化动作。
批量转换格式
调整图片格式不需要依靠 imagemagick,所以这回我们没有在脚本开头填写环境变量。
read -r -d '' applescriptCode1 <<'EOF'
set formatList to {"png", "jpeg"}
choose from list formatList
return result
EOF
ffotmat=$(osascript -e "$applescriptCode1")
idx=0
for f in "$@";do
sips -s format $ffotmat --out "${f%.*}.$ffotmat" "$f"
let idx=$idx+1
done && afplay "/System/Library/Sounds/Submarine.aiff"
osascript -e "display notification \"$(echo 修改了 $idx 个文件)\""
运行这个动作后,你会看到一个格式选单,选好后就能生成一堆指定格式的图片了。
小结
说到图片处理,我们常常想到 Photoshop、Pixelmator Pro 这些较为专业的工具,但并不是所有的图片都需要请它们出马解决。是 Shortcuts 让我意识到,套壳截图、拼接多张图片等机械而频繁的操作,完全可以交给自动化的工具,就像使用稻谷脱壳机一样,把图片丢进去,你不用管机器内部是怎么运行的,也不用干预它的工作,符合预期的成品就会出来。
在 Shortcuts 里拼图、套壳
在我看来,Shortcuts 其实是帮你做好了「半成品菜」,你稍微组合、修改一下就能马上弄出一个可以反复使用的自动化动作。Mac 上缺少那么省力的工具,但也有办法,比如利用命令行工具。而每次输入命令显然不方便,这就是 LaunchBar、Automator、Keyboard Maestro 等自动化工具的一大长处,它们可以把复杂的命令打包起来,即使是完全不懂命令行的人也能无障碍使用。
只不过,别人做的动作不一定总是适合你,所以我在分享动作的同时,更喜欢讨论动作怎么实现、怎样修改。是在那儿干等着别人提供工具,还是自己学一点点知识、解决一部分问题,就看你的选择了。
没有评论:
发表评论