OSX系统通过Automator在右键服务菜单中加入识别二维码菜单,快速将图片中的二维码读取为字符串并复制到粘帖板中。
方案选型
以前开发过通过Automator调用Python脚本快速生成http服务,因此此次也选用“服务”这种方式。
安装Zbar
python可以通过Zbar进行二维码识别。Zbar安装相对比较困难,网上安装方法也很多,经测试Python2.7下如下方法可行
- brew update && brew upgrade
- brew install zbar
- 不要pip install zbar。而是下载这个包,修正了mac下的segmentation fault的bug,下载 https://github.com/npinchot/zbar
- 执行python setup.py install
Python二维码识别代码如下
#-*- coding: utf-8 -*-
import sys
import zbar
import subprocess
from PIL import Image
#通过输入读取文件路径
for f in sys.stdin:
filename = f.strip()
#创建图片扫描对象
scanner = zbar.ImageScanner()
#设置对象属性
scanner.parse_config('enable')
#打开含有二维码的图片
img = Image.open(filename).convert('L')
#获取图片的尺寸
width, height = img.size
#建立zbar图片对象并扫描转换为字节信息
qrCode = zbar.Image(width, height, 'Y800', img.tobytes())
scanner.scan(qrCode)
data = ''
for s in qrCode:
data += s.data
# 删除图片对象
del img
# 输出解码结果
print data
#将新内容拷贝至Mac系统的剪切板
p1 = subprocess.Popen(["echo", data], stdout=subprocess.PIPE)
subprocess.Popen(["pbcopy"], stdin=p1.stdout)
创建服务
- 打开Automator程序
- 点击新建按键
- 选择“服务”类型
- 在左侧菜单中找到:获取所选的Finder项目,拖拉到右侧
- 在左侧菜单中找到:运行 Shell 脚本,拖拉到右侧
- 按照如下配置
- 服务收到选定的图像文件 位于 任何应用程序
- 获取所选的Finder项目
- 运行Shell脚本中执行Python脚本,传递输入为stdin,在文本框中粘帖Python程序
- 点击保存,输入保存名称:识别二维码
- 验证
- 在图像文件上点击右键,选择服务,选择识别二维码,此时二维码内容会粘贴到粘贴板
- 在图像文件上点击右键,选择服务,选择识别二维码,此时二维码内容会粘贴到粘贴板
遗留问题
- 识别二维码后没有提示框提示是否操作成功,后续加上
- 本想通过程序实现识别Chrome中显示的二维码,但是未能找到Automator相关入口(Chrome中无法通过右键打开服务选项),因此通过安装插件的方式解决,插件地址:https://chrome.google.com/webstore/detail/qr-code-generator-and-rea/hkojjajclkgeijhcmfjcjkddfjpaimek?hl=zh-CN
开发过程中遇到的问题
- zbar安装比较费劲,网上资料挺多但是安装效果都不好,最后实际验证后采用了通过brew下载然后通过python脚本的方式安装