遇到的解析需求是一张图片,上面可能会有多个二维码,二维码的内容是 URL 地址。所以对库的一个要求就是可以解析多二维码的图片,再一个就是希望库不要依赖外部命令,需要我在 pip 之外做事情库才能正常工作。
pyzbar
找了一圈发现 zbar 二维码上是一个统治地位的存在,好多的 Python 库都是对 zbar 命令的包装库,pyzbar 库就是其中一个,它需要你在电脑上先安装 zbar 工具然后库才能工作。示例代码
from pyzbar import pyzbar
from PIL import Image
def extract_urls_from_qrcode(image_path):
image = Image.open(image_path)
barcodes = pyzbar.decode(image)
urls = []
for barcode in barcodes:
if barcode.type == 'QRCODE':
urls.append(barcode.data.decode('utf-8'))
return urls
# 输入图片路径
image_path = input("请输入图片路径: ")
# 解析二维码中的链接
urls = extract_urls_from_qrcode(image_path)
# 打印解析结果
if urls:
print("二维码中的链接:")
for url in urls:
print(url)
else:
print("未能解析二维码中的链接。")
pyzxing
我的需求用 pyzbar 都实现完了[代码都是 ChatGPT 大佬写的 😁],后面又发现了 pyzxing 库。zxing 也是大佬级别的二维码识别库了,zxing 是用 java 实现的,我记得很多 Android 应用应该用的就是 zxing。pyzxing 自带了一个 jar 包,所以不需要在 pip 之外安装其他东西,因此最后还是选择了 pyzxing。示例代码
from pyzxing import BarCodeReader
def decode_barcodes(image_path):
reader = BarCodeReader()
results = reader.decode_multiple(image_path)
reader.close()
return results
# 图像文件路径
image_path = 'path/to/image.png'
# 解码图像中的所有二维码
results = decode_barcodes(image_path)
if results:
print('解码结果:')
for result in results:
if result.valid:
print('二维码数据:', result.data)
else:
print('无法解码二维码。')
else:
print('未找到二维码。')
总结
两个库都能处理图片多二维码,pyzbar 需要外部安装 zbar 才能使用,pyzxing 不需要外部工具,但是需要 java 运行时。