文章目录
在 Python 中,你可以使用python-barcode库来生成条码,使用qrcode库生成二维码,然后使用Pillow库将生成的code123、ean13条码或qrcode二维码显示出来。
简介
- Code 128 码是一种一维条码,由美国的 Intermec 公司于 1981 年开发。它能够对数字、字母和符号进行编码,可表示 ASCII 码中从 32 到 126 的 128 个字符,这也是它被称为 Code 128 码的原因。
- EAN13 码即国际物品编码协会(EAN)制定的一种商品用条码,也称为通用商品条码,由 13 位数字组成,是目前全球使用最广泛的商品标识条码之一。
- 二维码
二维码,又称二维条码,是在一维条码的基础上发展而来的一种图形化编码技术,它能够在横向和纵向两个维度上同时存储信息,具有更高的数据容量和更强的纠错能力。
CODE128条码
介绍
特点
- 高密度:Code 128 码可以在较小的空间内容纳大量的数据,相较于其他一些一维条码,它能以更紧凑的方式编码信息,从而节省标签空间。
- 高容量:能够编码较多的字符,最多可编码 48 个 ASCII 字符,适合对较长数据进行编码。
- 可变性:有三种不同的字符集(A、B、C)可供选择,并且可以在条码符号中根据需要切换字符集,以实现对不同类型数据的高效编码。
- 校验功能:Code 128 码包含一个校验位,用于检测条码在扫描过程中可能出现的错误,提高了数据传输的准确性和可靠性。
编码规则
字符集
- 字符集 A:包含大写字母、数字 0 - 9、控制字符(如换行符、制表符等)以及一些特殊符号,适用于编码包含控制字符和大写字母的数据。
- 字符集 B:包含大小写字母、数字 0 - 9 以及一些特殊符号,适用于编码包含大小写字母和数字的数据。
- 字符集 C:仅包含数字 00 - 99,可将两个数字编码为一个条码字符,对于纯数字数据的编码效率更高。
起始符和终止符
每个 Code 128 码都以一个起始符开始,根据所使用的字符集不同,起始符有三种类型(起始符 A、起始符 B、起始符 C)。条码的末尾是一个终止符,用于表示条码的结束。
校验位
校验位是根据条码数据和起始符计算得出的一个字符,用于验证条码的准确性。计算方法是将每个字符的权重乘以其对应的字符值,然后将所有结果相加,再对 103 取模得到校验位的值。
python实现
- 安装依赖库
首先确保你已经安装了 python-barcode 和 Pillow 库,如果未安装,可以使用以下命令进行安装:
pip install python-barcode pillow
- 生成 CODE128 条码
CODE128 是一种高密度的条码,可编码数字、字母和符号。以下是生成 CODE128 条码的示例代码:
有多种写法
一种
txt = '12345H'
bar_class = get_barcode_class('code128')
ean = bar_class(txt, writer=ImageWriter())
fullname = ean.save("./条形码")
pix = QPixmap(fullname)
#self.barCodelabel.setPixmap(pix)
另一种
from barcode import Code128
from barcode.writer import ImageWriter
def generate_code128_barcode(data):
# 创建 Code128 条码对象
code = Code128(data, writer=ImageWriter())
# 保存条码图片
filename = code.save('code128_barcode')
print(f"条码已保存为 {filename}")
if __name__ == "__main__":
# 要编码的数据
barcode_data = "12345H"
generate_code128_barcode(barcode_data)
代码解释:
导入 Code128 类用于生成 CODE128 条码,ImageWriter 用于将条码保存为图片。
Code128(data, writer=ImageWriter()) 创建一个 CODE128 条码对象,data 是要编码的内容。
code.save(‘code128_barcode’) 将生成的条码保存为图片文件,文件名为 code128_barcode.png。
EAN13条码
介绍
编码结构
EAN13 码的 13 位数字有特定的含义,具体结构如下:
- 前缀码(前 3 位):由国际物品编码协会分配给各个国家或地区的编码组织,用于标识商品的原产国家或地区。例如,690 - 699 代表中国大陆地区。
- 厂商识别代码(接下来的 4 - 7 位):由所在国家或地区的编码组织分配给各个企业,用于标识生产该商品的企业。
- 商品项目代码(随后的 5 位):由企业自行分配,用于标识企业生产的不同商品项目。
- 校验码(最后 1 位):根据前面 12 位数字,按照特定的算法计算得出,用于检验条码扫描的准确性。
编码规则
- 数字与条码符号的对应:EAN13 码中的每个数字都对应着特定的条码模块组合,这些模块由宽条、窄条、宽空和窄空组成。条码阅读器通过识别这些宽窄不同的条和空来解码出对应的数字。
校验码的计算: - 从左到右,将第 1、3、5、7、9、11 位数字相加,得到奇数位数字之和。
- 将第 2、4、6、8、10、12 位数字相加,得到偶数位数字之和。
- 偶数位数字之和乘以 3,再加上奇数位数字之和。
- 用大于或等于上述结果且为 10 的最小整数倍的数减去该结果,得到的差就是校验码。
python实现
以下是详细的步骤和示例代码:
7. 安装所需库
首先,你需要安装python-barcode和Pillow库。可以使用pip命令进行安装:
pip install python-barcode pillow
- 示例代码
from barcode import EAN13
from barcode.writer import ImageWriter
from PIL import Image
def generate_and_display_barcode(code):
# 生成EAN-13条码
ean = EAN13(code, writer=ImageWriter())
# 保存条码图片
filename = ean.save('barcode')
# 使用Pillow打开并显示条码图片
img = Image.open(filename)
img.show()
if __name__ == "__main__":
# EAN-13条码需要12位数字,最后一位是校验位会自动生成
barcode_code = '690123456789'
generate_and_display_barcode(barcode_code)
- 代码解释
导入必要的库:
barcode.EAN13:用于生成 EAN-13 格式的条码。
barcode.writer.ImageWriter:用于将条码保存为图片。
PIL.Image:用于打开和显示生成的条码图片。
定义生成和显示条码的函数:
generate_and_display_barcode函数接受一个 12 位的数字字符串作为参数,用于生成 EAN-13 条码。
EAN13类用于生成条码,writer=ImageWriter()指定将条码保存为图片。
ean.save(‘barcode’)将生成的条码保存为图片文件,文件名为barcode.png。
Image.open(filename)打开生成的图片文件,img.show()显示图片。
主程序:
定义一个 12 位的数字字符串barcode_code,调用generate_and_display_barcode函数生成并显示条码。 - 注意事项
EAN-13 条码需要 12 位数字,最后一位是校验位会自动生成。
除了 EAN-13 格式,python-barcode库还支持其他多种条码格式,如 CODE128、QR Code 等。你可以根据需要选择合适的条码格式。
生成其他类型条码
python-barcode 还支持其他类型的条码,如 EAN8、UPCA 等,生成方法类似。以下是生成 EAN8 条码的示例代码:
from barcode import EAN8
from barcode.writer import ImageWriter
def generate_ean8_barcode(data):
# 创建 EAN8 条码对象
code = EAN8(data, writer=ImageWriter())
# 保存条码图片
filename = code.save('ean8_barcode')
print(f"条码已保存为 {filename}")
if __name__ == "__main__":
# EAN8 条码需要 7 位数字,最后一位是校验位会自动生成
barcode_data = "1234567"
generate_ean8_barcode(barcode_data)
QR Code二维码
介绍
结构特点
- 高密度编码:与一维条码相比,二维码可以在更小的面积内存储大量的数据。例如,常见的 QR 码(一种二维码)可以存储多达 7089 个数字或 4296 个字母和数字的组合。
- 纠错能力强:二维码具备一定的纠错功能,即使二维码部分损坏或污损,仍然可以通过纠错机制恢复出完整的数据。纠错级别通常分为 L(7% 纠错)、M(15% 纠错)、Q(25% 纠错)、H(30% 纠错)四个等级。
- 多种编码格式:常见的二维码格式有 QR 码、Data Matrix 码、PDF417 码等,不同的格式在编码规则、应用场景等方面可能会有所差异。
编码原理
- 数据编码:将要编码的数据(如文本、网址、联系方式等)按照一定的编码规则转换为二进制数据。
- 模块排列:根据二维码的格式和版本,将二进制数据转换为黑白相间的模块,并按照特定的规则排列在二维码的矩阵中。
- 添加辅助信息:为了保证二维码的正确识读,还需要在矩阵中添加一些辅助信息,如定位图案、校正图案、格式信息等。
python实现
- 首先需要安装 qrcode与pillow库:
pip install qrcode pillow
- 以下是生成 QR Code 的示例代码:
import qrcode
from qrcode.image.styledpil import StyledPilImage
def generate_qr_code(data):
# 创建 QRCode 对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 添加数据到 QRCode 对象
qr.add_data(data)
qr.make(fit=True)
# 生成二维码图片
img = qr.make_image(image_factory=StyledPilImage)
# 保存二维码图片
img.save('qr_code.png')
print("二维码已保存为 qr_code.png")
if __name__ == "__main__":
# 要编码的数据
qr_data = "Hello,World"
generate_qr_code(qr_data)
- 代码解释:
导入 qrcode 库和 StyledPilImage 用于生成带样式的二维码图片。
创建 QRCode 对象,设置二维码的版本、纠错级别、方块大小和边框等参数。
qr.add_data(data) 将要编码的数据添加到 QRCode 对象中,qr.make(fit=True) 生成二维码。
qr.make_image(image_factory=StyledPilImage) 生成二维码图片,img.save(‘qr_code.png’) 将图片保存到本地。
作者:帅得不敢出门