python生成条形码和二维码

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 · PyPIGitHub - 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()方法参数介绍

python生成条形码和二维码

 

导包:

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简单实现二维码和条形码

上一篇:qt使用 barcode scanner


下一篇:Vue + Barcode 实现扫一维码二维码