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

如何使用Python(pylibdmxt)生成指定大小的DataMatrix二维码PNG文件

解决方案

你生成的原始DataMatrix每个数据单元仅占1像素,要设置指定输出尺寸,可通过等比例放大二维码单元的方式实现,避免二维码变形降低识别率,修改后代码如下:

from PIL import Image, ImageOps
# datamatrix编码依赖,如果你使用其他编码库可自行替换
from pylibdmtx.pylibdmtx import encode

def createDatamatrix(self):
    data = 'SN: 1665464'+'\nTN: H76vdg/'+'\nConfigs:Sample'
    self.encoded_data = encode(data.encode('utf-8'))
    # 生成原生尺寸二维码
    raw_img = Image.frombytes('RGB', (self.encoded_data.width, self.encoded_data.height), self.encoded_data.pixels)
    
    # 自定义目标输出像素尺寸,此处示例为400*400,可根据需求修改
    target_size = 400
    # 计算整数缩放倍数,保证每个二维码数据单元为正方形,无变形
    scale = target_size // raw_img.width
    # 用最近邻插值放大,保证边缘锐利无模糊
    self.img = raw_img.resize(
        (raw_img.width * scale, raw_img.height * scale),
        # 如果你使用的Pillow版本低于9.1.0,请将下方参数替换为Image.NEAREST
        resample=Image.Resampling.NEAREST
    )
    
    # 若需要严格匹配target_size尺寸,可取消下方注释补白边
    # pad_width = (target_size - self.img.width) // 2
    # pad_height = (target_size - self.img.height) // 2
    # self.img = ImageOps.expand(self.img, border=(pad_width, pad_height, pad_width, pad_height), fill='white')

    self.img.save('test.png')

注意事项

  • 必须使用*最近邻插值(NEAREST)*进行缩放,不能用默认的线性插值,否则二维码会出现模糊边缘,大幅降低识别成功率
  • 缩放倍数取整数是为了保证每个二维码数据单元的像素大小一致,无变形。如果接受轻微变形,也可以直接把目标尺寸传入resize方法,仅保留resample参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:02