[关闭]
@cleardusk 2016-02-23T13:41:38.000000Z 字数 994 阅读 1529

初探二维码

博客


正文

二维码现在太普及了,早就想涉猎一下二维码的相关知识了,今天抽了点时间看了看二维码的知识点。准确点说,微信支付宝用的是 QR code,QR Code 是二维条码的一种,二维条码还有汉信码、EZ 码等类型。参见维基链接可以详细了解 QR Code:https://en.wikipedia.org/wiki/QR_code

QR 全称是 Quick Response,设计的初衷就是为了能够快速解码。QR Code 本质上是信息传递的一种媒介与载体,将信息编码到 QR Code 中,然后通过解码器解码,QR 的特点就在于能够快速地将信息解码出来。微信的扫一扫就是一个解码器。

粗略看了看 QR Code 的原理,细节很繁琐,虽然不难但需不少时间。为了快速体验一番,我找到了这个项目:https://github.com/lincolnloop/python-qrcode
这是纯 python 写的 QR Code 生成器。

下面是用 qrcode 库生成 QR Code 的一个简单的 demo:

  1. import qrcode
  2. data = 'hello world!'
  3. filename = 'demo.png'
  4. qr = qrcode.QRCode()
  5. qr.add_data(data)
  6. qr.make()
  7. img = qr.make_image()
  8. img.save(filename)

当然,还有更快捷的写法:

  1. import qrcode
  2. img = qrcode.make('hello world!')
  3. img.save('demo.png')

这是上面用的方法生成的二维码:
demo.png-0.4kB

如果接触过命令行的话,直接在 shell 中调用 qr 程序就行了。比如:

  1. qr "hello world" > test.png

下面几个是生成 svg 矢量格式的图片的命令,fragment 选项会在像素格子间生成裂缝。实现的原理,猜测是在程序内部将栅格数据转换为 svg 矢量格式。

  1. qr --factory=svg-path "hello world!" > test.svg
  2. qr --factory=svg "hello world!" > test.svg
  3. qr --factory=svg-fragment "hello world!" > test.svg

以下就是生成的二维码图片,用微信扫一扫(长按图片,最下面的选项),看看里面是什么内容吧~

demo2.png-1.6kB
别看这么大一张图片,才 1.6k 大小,不会耗用啥流量的!

致谢

最后感谢 qrcode 项目团队成员及贡献者们!


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注