| 知乎专栏 | 
目录
安装
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()