在一次现场交流中,遇到这么一个问题:如何能方便的从保密单位返回信息!说实话我对这种单位的保密级别存在的意义怀有很大的疑问,它就像GFW只能屏蔽一部分人而不能分割全网,但是相比较两者的影响,前者不牢固的木桶所带来的问题更加严重而已。
闲话少叙,进入正题。像python这么一个开放的平台,每一个新技术出现之后肯定会形成相应的python版本模块,所以今天只是试用一下,至于二维码的概念和详细细节,暂且不去理会,既然已经有了轮子,就先让它转起来。python版本encode和decode二维码(QRCode:Quick Response Code)分别用到qrcode和zbar,此次试用平台是Raspbian:
首先安装这两个模块,raspberry的源已经有成品,放心大胆的去下载吧:
sudo apt-get install python-qrcode
sudo apt-get install python-zbar
然后生成二维码的图片(代码来自于网络)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import qrcode ''' qr = qrcode.QRCode( version=2, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=1 ) ''' qr = qrcode.QRCode() qr.add_data('this is a test for QRCode at my blog http://mowblog.com') qr.make(fit=True) img = qr.make_image() img.save("qrcode.png") |
再解码二维码图片获取其中的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import zbar import Image def decode_RQ(): scanner = zbar.ImageScanner() scanner.parse_config("enable") pil = Image.open("qrcode.png").convert('L') width, height = pil.size raw = pil.tostring() image = zbar.Image(width, height, 'Y800', raw) scanner.scan(image) data = '' for symbol in image: data+=symbol.data del(image) return data print(decode_RQ()) |
狠好用,测试用支付宝和微信扫描,也能正常解码得到内容。基本框框是搞定了,只要手机能上网,传输小一点的文本内容足够了。
--最后吐槽一下微信的扫一扫不如支付宝的好用,有两点:1.取景框太小没有利用摄像头调整焦距,大点的二维码图片你得把手机拉很远才能全部装进去,2.对摄像头的操控很慢而且效率低,扫好几次才能清晰的识别。同样一个二维码,用支付宝在对准的过程中就已经不知不觉解码了,而微信要在对准了之后等待至少0.5-1S才能解码