Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)

该文章已生成可运行项目,

条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,被广泛应用于物流、零售、医疗、教育等各领域。

本文将介绍如何使用Python快速生成各种常见的条形码如Code 128、EAN-13,以及生成二维码

Python条码库

本文需要用到 Spire.Barcode for Python 库,该库支持生成、识别各类一维和二维条码,包括 EAN, UPC, Code128, Code39, QR Code, Data Matrix 等,满足各种应用需求。此外还提供了丰富的接口来自定义条码图片的边框样式、颜色、边距等属性。
该Python条码生成库可以通过 pip轻松安装:

pip install Spire.Barcode

生成条码的类、方法简介

要使用Spire.Barcode for Python库生成条码,主要会用到以下类、属性、方法:

  1. BarcodeSettings 类:用于条码生成的各项设置。支持设置条码类型、数据、背景色、宽高度、边距、分辨率等。
  2. BarcodeSettings.Type 属性:设置条码类型。
  3. BarcodeSettings.Data 属性:设置条码数据。
  4. BarcodeSettings.Data2D 属性:设置二维码文本。
  5. BarcodeGenerator 类:用于条码渲染。
  6. BarcodeGenerator.GenerateImage() 方法:用于生成条码图片。

以下为生成条码的Python代码示例

Python 生成 Code128码

from spire.barcode import *

def WriteAllBytes(fname: str, data):
    with open(fname, "wb") as fp:
        fp.write(data)
    fp.close()

# 创建BarcodeSettings对象
barcodeSettings = BarcodeSettings()

# 将条码类型设置为Code128
barcodeSettings.Type = BarCodeType.Code128

# 设置条码数据
barcodeSettings.Data = "XD00555"

# 设置Code128条形码的代码集
barcodeSettings.Code128SetMode = Code128SetMode.Auto

# 创建BarCodeGenerator对象
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# 生成条码图片
barcodeimage = barCodeGenerator.GenerateImage()
WriteAllBytes("Code128.png", barcodeimage)

条码图:
Code128 码

Python 生成 EAN-13码

from spire.barcode import *

def WriteAllBytes(fname: str, data):
    with open(fname, "wb") as fp:
        fp.write(data)
    fp.close()

# 创建BarcodeSettings对象
barcodeSettings = BarcodeSettings()

# 将条码类型设置为EAN13
barcodeSettings.Type = BarCodeType.EAN13

# 设置条码数据
barcodeSettings.Data = "5019632805254"

# 创建BarCodeGenerator对象
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# 生成条码图片
barcodeimage = barCodeGenerator.GenerateImage()
WriteAllBytes("EAN13.png", barcodeimage)

条码图:
EAN13码

Python 生成二维码QR Code

from spire.barcode import *

def WriteAllBytes(fname:str,data):
    fp = open(fname,"wb")
    fp.write(data)
    fp.close()

# 创建BarcodeSettings对象
barcodeSettings = BarcodeSettings()

# 将条码类型设置为QR Code
barcodeSettings.Type = BarCodeType.QRCode

# 设置背景颜色
barcodeSettings.BackColor = Color.get_WhiteSmoke()

# 设置QR Code的编码模式
barcodeSettings.QRCodeDataMode = QRCodeDataMode.Byte

# 设置纠错等级(ECL)
barcodeSettings.QRCodeECL = QRCodeECL.M

# 设置是否在二维码底部显示文本
barcodeSettings.ShowTextOnBottom = True

# 设置分辨率
barcodeSettings.DpiX = 500
barcodeSettings.DpiY = 500

# 设置二维码数据
barcodeSettings.Data2D = "Hello, World"

# 创建BarCodeGenerator对象
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# 生成二维码图片
barcodeimage = barCodeGenerator.GenerateImage()
WriteAllBytes("QRCode.png", barcodeimage)

条码图:
在这里插入图片描述


– 测试过程中遇到的问题可前往论坛交流。

– 对于所生成条码上的水印,可以由此申请1个月试用授权来移除:https://www.e-iceblue.cn/misc/temporary-license.html

本文章已经生成可运行项目
### 代码分析 `generateEAN13` 函数的目的是生成 EAN - 13 条码并将其保存为 SVG 矢量图。下面对该函数可能的实现及需要关注的点进行分析: #### 功能需求 - 输入:一个 12 位的 EAN 码字符串和一个文件名。 - 输出:生成对应的 EAN - 13 条码(包含第 13 位校验码),并保存为 SVG 矢量图。 #### 潜在步骤 1. **校验码计算**:根据引用[2],需要计算第 13 位校验码。奇数位之和加上偶数位乘 3 之和,然后通过模 10 运算得到校验码。 2. **条码生成**:使用合适的开源库(如引用[1]中的 `barcode` 库)生成 EAN - 13 条码。 3. **参数优化**:可以参考引用[1]中的 `defaultSettings` 函数对条码进行尺寸调整和元数据添加。 4. **保存为 SVG**:将生成的条码保存为 SVG 文件。 ### 示例代码及优化 ```go package main import ( "fmt" "github.com/boombuler/barcode" "github.com/boombuler/barcode/ean" "os" ) // 计算 EAN - 13 校验码 func calculateCheckDigit(code string) (int, error) { if len(code) != 12 { return 0, fmt.Errorf("输入的 EAN 码必须是 12 位") } oddSum := 0 evenSum := 0 for i, char := range code { digit := int(char - '0') if i%2 == 0 { oddSum += digit } else { evenSum += digit * 3 } } totalSum := oddSum + evenSum checkDigit := (10 - (totalSum % 10)) % 10 return checkDigit, nil } // 标准配置模板 func defaultSettings(bc barcode.Barcode) barcode.Barcode { bc, _ = barcode.Scale(bc, 300, 150) // 合适尺寸 bc = barcode.AddMetadata(bc, "CREATOR", "Go Barcode") // 添加元数据 return bc } // 生成 EAN - 13 条码并保存为 SVG func generateEAN13(code string, filename string) error { checkDigit, err := calculateCheckDigit(code) if err != nil { return err } fullCode := fmt.Sprintf("%s%d", code, checkDigit) eanCode, err := ean.Encode(fullCode) if err != nil { return err } eanCode = defaultSettings(eanCode) file, err := os.Create(filename) if err != nil { return err } defer file.Close() err = barcode.SVG(eanCode, file) if err != nil { return err } return nil } ``` ### 代码解释 1. **calculateCheckDigit 函数**:根据引用[2]的逻辑,计算 EAN - 13 的第 13 位校验码。 2. **defaultSettings 函数**:参考引用[1],对条码进行尺寸调整和元数据添加。 3. **generateEAN13 函数**: - 调用 `calculateCheckDigit` 计算校验码。 - 拼接完整的 EAN - 13 码。 - 使用 `ean.Encode` 生成条码。 - 调用 `defaultSettings` 进行参数优化。 - 创建文件并将条码保存为 SVG 格式。 ### 潜在问题及解决方法 - **输入验证**:确保输入的 12 位 EAN 码是有效的数字字符串。 - **错误处理**:在每个可能出错的步骤都进行了错误处理,确保程序的健壮性。 - **文件操作**:使用 `defer file.Close()` 确保文件在函数结束时关闭,避免资源泄漏。 ### 调用示例 ```go func main() { code := "123456789012" filename := "ean13.svg" err := generateEAN13(code, filename) if err != nil { fmt.Println("生成条码时出错:", err) } else { fmt.Println("条码已成功保存为", filename) } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值