知乎专栏 |
安装
pip install qrcode
neo@MacBook-Pro-Neo ~ % pip install qrcode Collecting qrcode Downloading qrcode-6.1-py2.py3-none-any.whl (31 kB) Requirement already satisfied: six in /usr/local/lib/python3.9/site-packages (from qrcode) (1.15.0) Installing collected packages: qrcode Successfully installed qrcode-6.1
常规二维码
import qrcode img = qrcode.make('《Netkiller Python 手札》') img.save("text.png") img = qrcode.make('http://www.netkiller.cn') img.save("url.png")
颜色设置背景为白色,前景为绿色
import qrcode as qrcode qr = qrcode.QRCode(version=1, box_size=10, border=2) # 向二维码添加数据 qr.add_data("http://www.netkiller.cn") qr.make(fit=True) # 更改QR的背景为白色和绘画颜色为绿色 img = qr.make_image(fill_color="green", back_color="white") img.save('green.png') img.show() # 显示二维码
QRCode 参数
version: 范围为1到40整数(最小值是1,表示12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。
error_correction: 二维码的纠错范围,可以选择4个常量:
1. ERROR_CORRECT_L 7%以下的错误会被纠正
2. ERROR_CORRECT_M (default) 15%以下的错误会被纠正
3. ERROR_CORRECT_Q 25 %以下的错误会被纠正
4. ERROR_CORRECT_H. 30%以下的错误会被纠正
boxsize: 每个点(方块)中的像素个数
border: 二维码图像外围边框宽度,默认为4
NAME qr - script to create QR codes at the command line SYNOPSIS qr [--help] [--factory=FACTORY] [--optimize=OPTIMIZE] [--error-correction=LEVEL] [data] DESCRIPTION This script uses the python qrcode module. It can take data from stdin or from the commandline and generate a QR code. Normally it will output the QR code as ascii art to the terminal. If the output is piped to a file, it will output the image (default type of PNG). OPTIONS -h, --help Show a help message. --factory=FACTORY Full python path to the image factory class to create the image with. You can use the following shortcuts to the built-in image factory classes: pil (default), pymaging, svg, svg-fragment, svg-path. --optimize=OPTIMIZE Optimize the data by looking for chunks of at least this many characters that could use a more efficient encoding method. Use 0 to turn off chunk optimiza- tion. --error-correction=LEVEL The error correction level to use. Choices are L (7%), M (15%, default), Q (25%), and H (30%). data The data from which the QR code will be generated. SEE ALSO https://github.com/lincolnloop/python-qrcode/
使用方法
neo@MacBook-Pro-Neo ~ % qr "Some text" > test.png
安装依赖包
pip install myqr
from MyQR import myqr # myqr.run 参数: # words:文本/链接,或者你想说的话(不支持中文,很不友好) # picture:背景图 # colorsize:True 表示生成彩图 # save_name:生成的二维码文件名 myqr.run(words="http://www.netkiller.com", picture="db.png", colorized=True, save_name="netkiller.png")
安装依赖包
pip install pyzbar
pyzbar 是调用 zbar 共享库,所以还需要安装 zbar
brew install zbar
import numpy as np from PIL import Image import pyzbar.pyzbar as pyzbar # 读取文件,转成数组 im = np.array(Image.open("netkiller.png")) print(pyzbar.decode(im)) # 返回的信息 print('-' * 50) # 读取内容 print(pyzbar.decode(im)[0].data.decode("utf-8"))
输出信息
[Decoded(data=b'http://www.netkiller.com', type='QRCODE', rect=Rect(left=36, top=36, width=297, height=297), polygon=[Point(x=36, y=36), Point(x=36, y=332), Point(x=333, y=333), Point(x=332, y=36)])] -------------------------------------------------- http://www.netkiller.com
import cv2 import pyzbar.pyzbar as pyzbar def decodeQrcode(image): barcodes = pyzbar.decode(image) for barcode in barcodes: # 提取二维码数据 barcodeData = barcode.data.decode("utf-8") barcodeType = barcode.type # 打印调试信息 print("[INFO] Found {}: {}".format(barcodeType, barcodeData)) # 取出二维码在图像中的位置 (x, y, w, h) = barcode.rect cv2.rectangle(image, (x, y), (x + w, y + h), (255, 255, 255), cv2.BORDER_DEFAULT) # 框出图像中的二维码 text = "{} ({})".format(barcodeData, barcodeType) cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, .5, (225, 225, 225), 2) return image if __name__ == '__main__': # 默认摄像头是0,如果读取不到,改为1试试 camera = cv2.VideoCapture(1) while True: # 从摄像头读取当前帧 ret, frame = camera.read() # 转为灰度图像,转递给解码函数 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) im = decodeQrcode(gray) cv2.waitKey(5) cv2.imshow("camera", im) # 设置退出按键,按下q跳出本次循环 if cv2.waitKey(5) & 0xFF == ord('q'): break camera.release() cv2.destroyAllWindows()