You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-barcode与PIL生成3.8×2cm清晰可扫描条码贴纸问题

解决条码缩放后像素化的问题

核心原因

你遇到的像素化问题,本质是python-barcode默认生成的是低分辨率位图,后续用PIL缩放属于拉伸低像素图像,插值算法(包括LANCZOS)只能优化边缘,没法凭空生成高清细节,自然无法满足打印扫描的清晰度要求。

两种可行解决方案

方案1:生成矢量条码(SVG)再转高分辨率位图

矢量图可以无限缩放不失真,先生成SVG格式的条码,再转成对应尺寸的高分辨率PNG:

import barcode
from barcode.writer import SVGWriter
import cairosvg

# 生成SVG格式条码
barcode_type = 'code128'  # 根据需求更换条码类型
barcode_data = '1234567890'  # 你的条码内容
code = barcode.get(barcode_type, barcode_data, writer=SVGWriter())
svg_file = code.save('temp_barcode')

# 按3.8×2cm、300DPI转成PNG(打印标准分辨率)
# 3.8cm ≈ 449像素,2cm ≈ 236像素(计算方式:厘米数/2.54*300)
cairosvg.svg2png(
    url=svg_file,
    write_to='final_barcode.png',
    output_width=449,
    output_height=236,
    dpi=300
)

注:需要先安装依赖pip install cairosvg python-barcode

方案2:直接生成高分辨率位图

提前计算300DPI下3.8×2cm对应的像素参数,在生成条码时直接设置足够的尺寸,避免后续缩放:

import barcode
from barcode.writer import ImageWriter

# 打印用300DPI,计算对应参数
# module_width:条码最细条的宽度(单位cm),保证在300DPI下至少2像素
# module_height:条码高度直接设为2cm
options = {
    'module_width': 0.02,  # 0.02cm≈0.2mm,对应300DPI下约2.4像素
    'module_height': 2.0,  # 条码高度2cm
    'dpi': 300,  # 生成时的分辨率
    'text_distance': 6,  # 条码文字与条码的间距(像素)
    'font_size': 10,  # 条码文字大小
}

barcode_type = 'code128'
barcode_data = '1234567890'
code = barcode.get(barcode_type, barcode_data, writer=ImageWriter())
# 生成的图片直接符合尺寸要求,无需后续缩放
code.save('final_barcode', options=options)

额外提示

  • 打印条码的标准分辨率是300DPI,低于这个值容易出现扫描不清晰的问题。
  • 如果必须用PIL调整尺寸,前提是原始图的分辨率至少是目标尺寸的2倍以上,再用LANCZOS缩小,能一定程度提升清晰度,但效果不如上述两种方案。

内容的提问来源于stack exchange,提问作者Hamoda Elemary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:18