本文目录导读:

我来为您介绍几种Python生成条形码的方法和案例。
使用 python-barcode 库(推荐)
安装
pip install python-barcode pillow
EAN-13 条形码生成
from barcode import EAN13
from barcode.writer import ImageWriter
# 生成EAN-13条形码(13位数字)
ean = EAN13("123456789012", writer=ImageWriter())
ean.save("ean13_barcode")
print("EAN-13条形码已生成: ean13_barcode.png")
Code128 条形码(支持文本)
from barcode import Code128
from barcode.writer import ImageWriter
# 生成Code128条形码(支持数字和字母)
code128 = Code128("ABC123456", writer=ImageWriter())
code128.save("code128_barcode")
print("Code128条形码已生成: code128_barcode.png")
自定义条形码样式
from barcode import Code39
from barcode.writer import ImageWriter
# 自定义输出参数
options = {
'module_width': 0.3, # 条码宽度
'module_height': 15.0, # 条码高度
'font_size': 12, # 字体大小
'text_distance': 5.0, # 文字距离
'quiet_zone': 6.0, # 静区
'background': 'white', # 背景颜色
'foreground': 'black', # 前景颜色
}
code39 = Code39("HELLO123", writer=ImageWriter())
# 生成SVG格式
code39.save("custom_barcode", options=options)
print("自定义条形码已生成")
使用 qrcode 生成二维码
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer
# 生成基本二维码
data = "https://www.example.com"
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# 生成图像
img = qr.make_image(fill_color="black", back_color="white")
img.save("basic_qrcode.png")
# 生成带样式的二维码
qr_styled = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr_styled.add_data(data)
qr_styled.make(fit=True)
img_styled = qr_styled.make_image(
image_factory=StyledPilImage,
module_drawer=RoundedModuleDrawer()
)
img_styled.save("styled_qrcode.png")
print("二维码已生成")
生成多个条形码并保存为PDF
from barcode import EAN13, Code128
from barcode.writer import ImageWriter
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from PIL import Image
import os
def generate_barcodes_to_pdf():
# 生成条形码列表
barcodes_data = [
("EAN13", "123456789012"),
("Code128", "PROD001"),
("Code128", "PROD002"),
]
barcode_images = []
for idx, (barcode_type, data) in enumerate(barcodes_data):
# 创建条形码
if barcode_type == "EAN13":
barcode = EAN13(data, writer=ImageWriter())
else:
barcode = Code128(data, writer=ImageWriter())
filename = f"temp_barcode_{idx}"
barcode.save(filename)
barcode_images.append(f"{filename}.png")
print(f"生成了 {barcode_type} 条形码: {data}")
# 创建PDF
c = canvas.Canvas("barcodes_catalog.pdf", pagesize=A4)
width, height = A4
y_position = height - 50
for i, img_file in enumerate(barcode_images):
if y_position < 100:
c.showPage()
y_position = height - 50
c.drawImage(img_file, 50, y_position - 50, width=200, height=80)
y_position -= 120
c.save()
# 清理临时文件
for img_file in barcode_images:
if os.path.exists(img_file):
os.remove(img_file)
print("PDF已生成: barcodes_catalog.pdf")
generate_barcodes_to_pdf()
批量生成商品条形码(实战案例)
from barcode import EAN13
from barcode.writer import ImageWriter
import pandas as pd
import os
class BarcodeGenerator:
def __init__(self, output_dir="generated_barcodes"):
self.output_dir = output_dir
if not os.path.exists(output_dir):
os.makedirs(output_dir)
def generate_ean13(self, product_id, save=True):
"""生成单个EAN-13条形码"""
# EAN-13需要13位数字,补足位数
ean_code = str(product_id).zfill(12) + "0" # 最后一位是校验位
ean = EAN13(ean_code, writer=ImageWriter())
if save:
filename = os.path.join(self.output_dir, f"product_{product_id}")
ean.save(filename)
return f"{filename}.png"
return ean
def batch_generate_from_csv(self, csv_file):
"""从CSV文件批量生成条形码"""
df = pd.read_csv(csv_file)
results = []
for _, row in df.iterrows():
product_id = row.get('product_id')
product_name = row.get('product_name', f"Product_{product_id}")
if product_id:
filename = self.generate_ean13(product_id)
results.append({
'product_id': product_id,
'product_name': product_name,
'barcode_file': filename
})
print(f"生成条形码: {product_name} -> {filename}")
return pd.DataFrame(results)
def generate_inventory_labels(self, products):
"""生成库存标签"""
labels = []
for product in products:
barcode = self.generate_ean13(product['id'], save=False)
labels.append({
'name': product['name'],
'barcode': barcode,
'price': product.get('price', 0)
})
return labels
# 使用示例
generator = BarcodeGenerator()
# 批量生成
products_data = [
{'id': 1001, 'name': '商品A', 'price': 29.99},
{'id': 1002, 'name': '商品B', 'price': 39.99},
{'id': 1003, 'name': '商品C', 'price': 49.99},
]
labels = generator.generate_inventory_labels(products_data)
for label in labels:
print(f"商品: {label['name']}, 价格: {label['price']}")
生成带背景的条形码标签
from barcode import Code128
from barcode.writer import ImageWriter
from PIL import Image, ImageDraw, ImageFont
def create_label_with_barcode(product_name, price, barcode_data, output_file):
"""创建带条形码的商品标签"""
# 生成条形码
code128 = Code128(barcode_data, writer=ImageWriter())
barcode_img = code128.render(writer_options={
'module_width': 0.4,
'module_height': 10,
'font_size': 10,
'text_distance': 2,
'quiet_zone': 4,
})
# 创建标签背景
label_width = 400
label_height = 300
label = Image.new('RGB', (label_width, label_height), 'white')
draw = ImageDraw.Draw(label)
# 添加边框
draw.rectangle([5, 5, label_width-5, label_height-5], outline='black', width=2)
# 添加商品名称
draw.text((20, 20), f"商品: {product_name}", fill='black')
draw.text((20, 50), f"价格: ¥{price:.2f}", fill='black')
# 将条形码粘贴到标签上
barcode_img = barcode_img.resize((350, 100))
label.paste(barcode_img, (25, 80))
# 添加公司信息
draw.text((20, 200), "感谢购买!", fill='gray')
# 保存标签
label.save(output_file)
print(f"标签已生成: {output_file}")
# 使用示例
create_label_with_barcode(
product_name="示例商品",
price=99.99,
barcode_data="ITEM12345",
output_file="product_label.png"
)
支持的条形码类型
- EAN-13: 13位数字,常用于零售商品
- EAN-8: 8位数字,用于小商品
- Code 39: 支持字母数字
- Code 128: 支持所有ASCII字符
- UPC-A: 12位数字,北美标准
注意事项
- 条形码验证: 确保数据符合条形码规范
- 图像质量: 设置合适的dpi以保证打印质量
- 静区: 条形码周围需要保留空白区域
- 校验位: 某些条形码类型需要计算校验位
这些案例涵盖了从简单的条形码生成到批量处理的完整方案,您可以根据实际需求选择合适的实现方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播