ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python生成条形码和二维码

2022-01-04 14:33:08  阅读:359  来源: 互联网

标签:条形码 python barcode 生成 二维码 qrcode save


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

 

导包:

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 39Code 93Code 128ITFCodabarRSS-14 (all variants)RSS Expanded (most variants)QR CodeData 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简单实现二维码和条形码

标签:条形码,python,barcode,生成,二维码,qrcode,save
来源: https://blog.csdn.net/weixin_49898946/article/details/122301307

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有