强迫用户换设备才能完成的操作,都带着一丝冒犯,比如说:“扫描二维码,查看原文”。为什么我们分明端坐在电脑面前,却要掏出手机扫码呢?“脱裤子放屁”讲的就是这些无理要求。
麻烦其实只是表面原因,真正让人反感之处在于,滋生出这些二维码的网页默认我们是垃圾信息消费者,比如,默认我们在“刷公众号”——因为微信自带长按识别二维码的功能,不需要掏出第二台设备来扫码——但严肃的阅读往往不会在微信中进行,有追求的读者通常会使用 RSS 阅读器、稍后读服务甚至打印成 PDF 以便做批注,这时候遇上一个二维码,如鲠在喉。扫兴。
有人尝试过回击这些二维码,使用了一些在线解析服务,虽然保住了尊严、也避免了树木枯死1,但经历一番截图、上传、复制识别结果再删掉图片的操作后,客观上恐怕还不如掏手机方便。扫码这种司空见惯的操作,就应该做成设备的一个自带功能,无需联网、打开即用,就像 iPhone 相机自带的二维码识别功能那样。
面对二维码的泛滥,我制作了一个 Keyboard Maestro 扫码动作,可以截图识别屏幕上的任何二维码,无需求助在线服务,更不用频繁掏手机。本质是一段代码,下面仅提供 Keyboard Maestro 版,当然,复制粘贴一下您就可以获得 LaunchBar、Alfred、Automator 乃至 Shortcuts 版。
动作使用
本文随后提供的代码是通用的,在不同自动化工具中的效果也大同小异,展示部分仅以 Keyboard Maestro 为例,不会重复展示各个自动化工具。本文各项动作均围绕二维码识别工具 ZBar 打造,这是一款开源的离线工具,在多个平台上被广泛使用,还有一个 iOS 客户端,在 iPhone 尚不支持原生扫码的时代还挺有名气;如今在手机上已经没必要安装 ZBar,但它在桌面端尤其是自动化领域还是老当益壮。
第一次安装可能有些麻烦,需要用到终端(Terminal),但以后就可以嵌入自动化工具、无需再折腾命令行界面。建议通过 HomeBrew 安装,方便日后统一管理。
brew install zbar
ZBar 的命令极其简单,需要了解的只有一句 zbarimg "图片路径"
,该命令随后会返回二维码中的内容。
当然,本文不会让诸位使用命令行来识别二维码,那未免太敷衍了事,简直是把后厨的食品原料直接堆上桌。通过将 ZBar 命令融入自动化工具,即可实现从截图到获取二维码内容的整套流程。
- 按下快捷键
⇧Shift-⌘Command-0
,开始截屏; - 选取屏幕任意位置的二维码,包括某些禁止复制的网页,毕竟截屏是系统级操作,无法被阻止;
- 稍等片刻,二维码内容即可被拷贝至剪贴板,同时 Keyboard Maestro 会以大号文字显示识别结果
最后一步显示识别结果是为避免恶意链接,某些网站在二维码中插入来者不善的内容,比方说,如果识别结果是一段 URL Scheme,那就应当小心,避免唤醒某些流氓软件。如果不习惯这种耿直的提醒方式,也可以在“Display Text Large”步骤中换成通知或者弹窗。
原理简析
为方便在其他自动化工具中使用,我把核心操作写成了 Shell 脚本,可以截屏扫码并拷贝识别结果到剪贴板。由于不涉及和自动化工具本身的交互,可以不做修改直接粘贴到 LaunchBar、Alfred 或 Automator 中运行。文章开头已提供多个版本的现成动作,熟悉 Shell 脚本的读者也可以自行修改下方代码,添加更多后续功能(比如识别到网址后自动打开该网页)。
PATH=$PATH:/usr/local/bin/
screencapture -i ~/qrimg.png
zbarimg "/Users/apple/qrimg.png" | sed -e 's/scanned.*//g' -e 's/QR-Code://g' | pbcopy
rm ~/qrimg.png
以上代码完整模拟了手动截图识别二维码的操作,大致流程如下:
- 截图,将屏幕上的二维码截取下来保存到桌面;
- 调用 ZBar 识别二维码,并从中去除提示信息等无用部分,只留下识别出来的内容;
- 将识别结果拷贝到剪贴板;
- 移除桌面上的截图图片
如果全程使用 Keyboard Maestro 自带模块完成以上操作,除了调用 ZBar 以外可以完全不用代码,不过既然已经有了通用的脚本,本文就不再提供只能用于 Keyboard Maestro 的动作。
Keyboard Maestro 用户可以搭配 Palette 使用
本文动作的默认快捷键是 ⇧Shift-⌘Command-0
,这组快捷键模仿了 macOS 自带截屏快捷键 ⇧Shift-⌘Command-4
,前两位修饰键都一样,可以稍微降低一些记忆难度。而在 Keyboard Maestro,这一键位设计就不只是“稍微”给快捷键减压了——事实上,诸位可以把所有与“截屏”相关的操作都设成同一个键位,将相应动作塞进一个 Palette(调色盘)中。
Palette 是一组相关 Keyboard Maestro 的聚合,呈现为悬浮工具栏的样式。在本节的例子中,Palette 汇聚了拥有相同快捷键的动作,显示 Palette 后可以直接点选所需功能,也可以按下动作首字母的对应的键盘按键来触发它们(上图中颜色较亮的字母即可以按下的按键)。
识别二维码毕竟是偶然为之,如果单独为它设计一个键位,未免有点浪费,日后若是遇上截图 OCR 提取文字、截图翻译、截图以图搜图等一系列需求,很难想象如何为它们一一设置专用快捷键,即便勉强绑好了键位,用起来也像弹钢琴一样麻烦。使用 Palette 就能绕过“快捷键不够用”的问题,可以为日后的自动化预留空间。
Palette 种类多矣,用法更是丰富,需要深入了解的话可以参考前文《Keyboard Maestro Palette:macOS 上的全能工具箱》。
小结
越来越多的文章或网页奉行移动优先,这让手机已经成了互联网中名副其实的 单点(Single Point),一旦手机没电或不在身边,人好像就被去势了一样。我们没法改变潮流,只能清理已经冲到脚边的漂流垃圾。
- 一款种树游戏,在设定时间内忍不住使用手机的话,虚拟树木就会枯死,被用于“戒手机”。 ↩