MAC通过Automator读取二维码图片开发小记

in #cn7 years ago

OSX系统通过Automator在右键服务菜单中加入识别二维码菜单,快速将图片中的二维码读取为字符串并复制到粘帖板中。

方案选型

以前开发过通过Automator调用Python脚本快速生成http服务,因此此次也选用“服务”这种方式。

安装Zbar

python可以通过Zbar进行二维码识别。Zbar安装相对比较困难,网上安装方法也很多,经测试Python2.7下如下方法可行

  1. brew update && brew upgrade
  2. brew install zbar
  3. 不要pip install zbar。而是下载这个包,修正了mac下的segmentation fault的bug,下载 https://github.com/npinchot/zbar
  4. 执行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程序
    • 点击保存,输入保存名称:识别二维码 
      38709779.png
  • 验证
    • 在图像文件上点击右键,选择服务,选择识别二维码,此时二维码内容会粘贴到粘贴板
      39012375.png

遗留问题

开发过程中遇到的问题

  • zbar安装比较费劲,网上资料挺多但是安装效果都不好,最后实际验证后采用了通过brew下载然后通过python脚本的方式安装