Barcode库/Qrcode库/MyQR库/Zxing库的简单介绍
0.本章内容
0.1.条形码的使用
-
1.1.条形码介绍
-
1.2.Barcode库的简单介绍
-
1.3.Barcode库常用方法及参数介绍
-
1.4.用python简单实现条形码生成
0.2.二维码的使用
-
2.1.二维码介绍
-
2.2.Qrcode库的简单介绍
-
2.3.使用qrcode库实现普通二维码
-
2.4.Qrcode库的高级用法
-
2.5.MyQR库的简单介绍
-
2.6.使用MyQR库实现生成带图片的二维码
0.3.解析二维码
-
3.1.Zxing库的简单介绍
-
3.2.使用zxing库解析二维码的内容
0.4.导言:
-
本章所生成的条形码和二维码图片均在images文件夹中
1.条形码的使用
1.1.条形码介绍
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用 。
条形码分为4个部分,从左到右分别为:
1-3位:共3位,例如693,是中国的国家代码之一。(690--695都是中国的代码,由国际上分配)
4-8位:共5位,例如69838,代表着生产厂商代码,由厂商申请,国家分配
9-12位:共4位,例如0001,代表着厂内商品代码,由厂商自行确定
第13位:共1位,例如3,是校验码,依据一定的算法,由前面12位数字计算而得到。
1.2.Barcode库的简单介绍
-
barcode是一个用于生成条形码的库,默认生成格式为SVG的图片
-
第三方库下载:
-
pip install python-barcode
1.3.Barcode库常用方法及参数介绍
-
查看python-barcode支持的条形码格式:
-
barcode.PROVIDED_BARCODES
-
简单创建条形码 barcode.get
barcode.get(name,code,writer_mode,set_style,bottom_text) 参数解释: name:条形码格式;-->必选参数 ode:条形码内容;--->必选参数 [ImageWriter或SVGWriter:要使用的写入程序;默认是SVGWriter set_style:(字典)生成条形码图片的设置样式; 默认是default_writer_options这个变量 bottom_text:条形码底部显示的文本]
-
创建条形码对象 EAN():
EAN(): 参数write 为 NONE,保存图像文件格式则是 svg, 参数为ImageWrite()则默认图片格式是 PNG,需要改成JPEG等,则需要在options={“format”: “JPEG”},进行设置
-
保存条形码图片 .save()
save函数有两个参数:save(filename,options=None) filename参数为保存文件名,不需要加扩展名,将根据设置自动添加扩展名,由函数返回文件全名。当前面构造函数使用默认writer时,保存为SVG文件,扩展名为.svg。 options参数默认值为None,此时使用默认参数。如果需要修改设置,使用字典传入参数,例如:save("d:\\barcode",{'text': 'ABCD','format':'JPEG'})。可用参数如下: 'module_width':默认值0.2,每个条码宽度(?),单位为毫米 'module_height':默认值15.0,条码高度,单位为毫米 'quiet_zone':默认值6.5,两端空白宽度,单位为毫米 'font_size':默认值10,文本字体大小,单位为磅 'text_distance':默认值5.0,文本和条码之间的距离,单位为毫米 'background':默认值'white',背景色 'foreground':默认值'black',前景色 'text':默认值'',显示文本,默认显示编码,也可以自行设定 'write_text':默认值True,是否显示文本,如果为True自动生成text的值,如果为False则不生成(如果此时手工设置了text的值,仍然会显示文本)。 'center_text':默认值True,是否居中显示文本 'format':默认值'PNG',保存文件格式,默认为PNG,也可以设为JPEG、BMP等,只在使用ImageWriter时有效。 'dpi':默认值300,图片分辨率,,只在使用ImageWriter时有效。
1.4.用python简单实现条形码生成
导包:
import barcode
创建条形码格式对象
# 创建条形码格式对象,参数为支持的格式
EAN = barcode.get_barcode_class('code39')
定义条形码内容
# 条形码内容
message = "693202111523382"
默认格式是SVG,所以为了使生成的条形码是图片,导包:ImageWriter
from barcode.writer import ImageWriter
创建条形码格式
# 创建条形码对象
ean = EAN(message,writer=ImageWriter())
保存条形码图片
# 保存条形码图片,并且返回路径
fullname = ean.save("code39")
print(f"条形码路径:{fullname}")
1.4.1.条形码生成的代码总结:
import barcode
from barcode.writer import ImageWriter
# print(f"python-barcode支持的条形码格式:\n{barcode.PROVIDED_BARCODES}") #查看 python-barcode 支持的条形码格式
# 更多了解:https://pypi.org/project/python-barcode/0.8.1/
# 创建条形码格式对象,参数为支持的格式
EAN = barcode.get_barcode_class('code39')
# 条形码内容
"""
自定义条形码内容:
693:中国的国家代码之一
2021.11.5 写代码的时间
23:38:写代码的时间
2:由前面12位数字依据一定的算法计算得到 6+9+3-2-0-2-1-1-1-5-2+3+3-8
"""
message = "693202111523382"
# 创建条形码对象
ean = EAN(message,writer=ImageWriter())
# 保存条形码图片,并且返回路径
fullname = ean.save("images/条形码")
print("条形码生成成功")
print(f"条形码路径:{fullname}")
2.二维码的使用
2.1.二维码介绍
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。
2.2.Qrcode库的简单介绍
qrcode库是用于生成二维码图像的库,该库的下载链接:qrcode · PyPI 或 GitHub - lincolnloop/python-qrcode: Python QR Code image generator
使用该库时,需要安装image库,而image库依赖于django、olefile、pillow库。
使用pip安装的命令如下:
pip install qrcode pip install image
2.3.使用qrcode库实现普通二维码
导包
import qrcode
设置二维码内容
data = "Ordinary QR code generated successfully" #二维码跳转链接或内容 不过好像中文不行
生成二维码
image = qrcode.make(data=data)
显示二维码
image.show()
保存二维码
image.save("images/普通二维码生成.jpg")
2.3.1.生成普通二维码案例代码总结
# qrcode 普通二维码生成
import qrcode
data = "Ordinary QR code generated successfully" #二维码跳转链接或内容 不过好像中文不行
# 生成二维码
image = qrcode.make(data=data)
# 显示二维码
image.show()
# 保存二维码
image.save("images/普通二维码生成.jpg")
print("普通二维码生成成功!!!")
print("="*10)
2.4.Qrcode库的高级用法
.QRCode()方法的使用
.QRCode()方法 参数: # version:二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177 # error_correction:二维码错误容许率,默认 ERROR_CORRECT_M,容许小于 15% 的错误率 # box_size:二维码每个小格子包含的像素数量 # border:二维码到图片边框的小格子数,默认值为 4
导包
import qrcode
创建QRCode对象
qr = qrcode.QRCode(version=1,
error_correction=1,
box_size=10,
border=4
)
设定二维码内容
data = "QR code with color generated successfully" #二维码跳转链接或内容 不过好像中文不行
使用add_data()方法将附加数据到当前QR对象
qr.add_data(data=data)
启用二维码颜色设置
qr.make(fit=True)
设置QR 的背景和绘画颜色
# fill_color`和`back_color`可以更改 QR 的背景和绘画颜色
img = qr.make_image(fill_color="blue",back_color="white")
二维码显示
img.show()
二维码保存
img.save("images/带颜色的二维码.jpg")
2.4.1.生成带颜色的二维码案例代码总结
# qrcode 带颜色的二维码生成
import qrcode
"""
.QRCode()方法 参数:
version:二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177
error_correction:二维码错误容许率,默认 ERROR_CORRECT_M,容许小于 15% 的错误率
box_size:二维码每个小格子包含的像素数量
border:二维码到图片边框的小格子数,默认值为 4
"""
qr = qrcode.QRCode(version=1,
error_correction=1,
box_size=10,
border=4
)
data = "QR code with color generated successfully" #二维码跳转连接或内容 不过好像中文不行
qr.add_data(data=data)
# 启用二维码颜色设置
qr.make(fit=True)
img = qr.make_image(fill_color="blue",back_color="white")
# 二维码显示
# img.show()
# 二维码图片保存
img.save("images/带颜色的二维码.jpg")
print("带颜色的二维码生成成功!!")
2.5.MyQR库的简单介绍
MyQR 库非常强大,可以生成各种各样的二维码。可以生成 正常的二维码、黑白图片二维码、彩色图片二维码、动态二维码
MyQR 的 Github 地址如下
https://github.com/sylnsfar/qrcode
可以通过命令行安装 MyQR 库,也可以在PyCharm中之间安装 MyQR 库
pip install myqr
2.6.使用MyQR库实现生成带图片的二维码
2.6.1.生成普通带图片的二维码
我们只需要调用 myqr.run()
方法,传递给定的参数就能生成指定的二维码。
run()方法参数:
run(words, version=1, level='H', picture=None, colorized=False, contrast=1.0, brightness=1.0, save_name=None, save_dir=os.getcwd())
run()方法参数介绍
导包:
from MyQR import myqr
设置二维码内容 可以是字符或者链接,不过好像中文不好使
words = "QR code with graph generated successfully"
调用 myqr.run()
方法,传递给定的参数就能生成指定的二维码
myqr.run(
words=words,
version=1,
picture='images/A1.png',
colorized=True,
save_name="images/带图片的二维码.png"
)
2.6.1.1.生成带图二维码案例代码总结
# 带图的二维码
from MyQR import myqr
"""
words:二维码内容,链接或者句子
version:二维码大小,范围为[1,40]
level:二维码纠错级别,范围为{L,M,Q,H},H为*,默认。
picture:自定义二维码背景图,支持格式为 .jpg,.png,.bmp,.gif,默认为黑白色
colorized:二维码背景颜色,默认为 False,即黑白色
contrast:对比度,值越高对比度越高,默认为 1.0
brightness:亮度,值越高亮度越高,默认为 1.0,值常和对比度相同
save_name:二维码名称,默认为 qrcode.png
save_dir:二维码路径,默认为程序工作路径
"""
# 二维码内容
words = "QR code with graph generated successfully"
myqr.run(
words=words,
version=1,
picture='images/A1.png',
colorized=True,
save_name="images/带图片的二维码.png"
)
print("带图的二维码生成成功!!!")
print("="*10)
2.6.2.生成带动图的二维码
只需要将run()函数中的picture参数改用GIF动图即可
导包
from MyQR import myqr
设置二维码内容 可以是字符或者链接,不过好像中文不好使
words = "The QR code. GIF of the drawing was saved successfully"
使用run()函数生成二维码
myqr.run(
words=words,
version=1,
picture="images/企鹅.gif",
colorized=True,
save_name="images/带动图的二维码.gif"
)
2.6.2.1.生成带动图的二维码案例代码总结
# 带动图的二维码
from MyQR import myqr
# 更多:https://pypi.org/project/MyQR/ https://github.com/sylnsfar/qrcode
words = "The QR code. GIF of the drawing was saved successfully"
myqr.run(
words=words,
version=1,
picture="images/企鹅.gif",
colorized=True,
save_name="images/带动图的二维码.gif"
)
print("带动图的二维码.gif保存成功!!")
print("="*10)
3.解析二维码
3.1.zxing库的简单介绍
zxing库是一个开源的、多格式的1D/2D条形码图像处理库,用Java实现,具有其他语言的端口,但出现意外的EOF。我们的重点是使用手机上的内置摄像头扫描和解码设备上的条形码,而无需与服务器通信。然而,该项目也可用于在台式机和服务器上对条形码进行编码和解码。
目前支持格式:
UPC-A and UPC-EEAN-8 and EAN-13Code 39 | Code 93Code 128ITF | CodabarRSS-14 (all variants)RSS Expanded (most variants)QR Code | Data MatrixAztec ('beta' quality)PDF 417 ('alpha' quality) |
---|---|---|---|
第三方包下载:
pip install zxing
了解更多:Python zxing包_程序模块 - PyPI - Python中文网
3.2.使用zxing库解析二维码的内容
导包:
import zxing
实例化BarCodeReader
reader = zxing.BarCodeReader()
调用decode()函数,decode(要解析的条形码或者二维码)
在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
barcode = reader.decode("images/带动图的二维码.gif")
获取解析后的内容
result = barcode.parsed
print(f"解析二维码内容:{result}")
3.2.1.解析二维码 案例代码总结
import zxing
reader = zxing.BarCodeReader()
# 在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
barcode = reader.decode("images/带动图的二维码.gif")
result = barcode.parsed
print(f"解析二维码内容:{result}")
3.3.使用zxing库解析条形码的内容
导包:
import zxing
实例化BarCodeReader
reader = zxing.BarCodeReader()
调用decode()函数,decode(要解析的条形码或者二维码)
在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
barcode = reader.decode("images/条形码.png")
获取解析后的内容
result = barcode.parsed
print(f"解析条形码的内容:{result}")
3.3.1.解析条形码 案例代码总结
# 解析条形码
import zxing
reader = zxing.BarCodeReader()
# 在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
barcode = reader.decode("images/条形码.png")
result = barcode.parsed
print(f"解析条形码的内容:{result}")
需要源代码请访问:二维码和条形码: 用python简单实现二维码和条形码