picqer/php-barcode-generator是php生成标准条形码最稳方案,纯gd即可运行,支持ean13、code128等;generate()返回二进制数据,需设header或写入文件,module width指单条纹宽(非总宽),ean13须严格13位数字,中文不支持编码但可额外添加说明文字。

用 picqer/php-barcode-generator 生成 PNG 条形码最稳
直接上结论:别碰那些封装不全、文档缺失的旧库,picqer/php-barcode-generator 是目前 PHP 里生成标准条形码(如 EAN13、CODE128)最靠谱的选择。它不依赖 GD 扩展的冷门函数,也不强制要求 imagick,纯 GD 就能跑。
常见错误是装了 tecnickcom/tcpdf 想顺带画条码——它只在 PDF 内部渲染,导出单图麻烦,还容易因字体缺失报 Could not include font;也有人试 php-barcode(无命名空间老库),PHP 8+ 直接 fatal error。
- 安装命令:
composer require picqer/php-barcode-generator - 支持格式:优先用
GeneratorPNG,GeneratorSVG适合需要缩放不失真的场景 - 注意
generate()返回的是原始图像二进制数据,不是文件路径——别直接 echo,要加header('Content-Type: image/png')或写入文件
generate() 的三个必填参数和一个易错默认值
调用 generate() 时,顺序是内容、类型、宽度、高度。最容易翻车的是把「宽度」理解成「像素总数」——其实它是每个条纹的宽度(module width),单位是像素,典型值是 2 或 3;总图像宽度会自动按内容长度推算。
例如生成 EAN13:13 位数字必须严格校验,少一位或多一位都会抛 InvalidArgumentException;而 CODE128 能编码字母数字,但内容含控制字符(如 \x00)会导致空白输出,得提前过滤。
立即学习“PHP免费学习笔记(深入)”;
PHP QR Code 是一个开源(LGPL)的库,用于生成 QR Code,即二维码。基于 libqrencode C 库,提供了创建 QR Code 条形码图像的 API(PNG、JPEG 依赖于 GD2)。完全使用 PHP 实现。
- 内容参数:字符串,不能为
null或空格串,EAN13类型下必须是 13 位纯数字 - 类型参数:用常量
BarcodeGeneratorPNG::TYPE_EAN_13,别手写字符串'EAN13',否则静默失败 - 高度参数:指条纹高度(单位 px),不是整个图片高,建议 ≥ 50,太矮扫码枪扫不出
- 默认背景色是透明,如果贴在有色背景上显示异常,初始化时传第 5 个参数:
['bg_color' => [0, 0, 0, 0]]改成不透明白底
中文环境下生成失败?大概率是字体或编码问题
这个库本身不渲染文字,只画条纹。但很多人误以为它该带「下方文字」——它默认不生成人眼可读的底部数字,得自己用 GD 补。这时候如果系统没装中文字体,或者用了 imagefttext() 却传了 UTF-8 字符串没转码,就会出现乱码或空白。
更隐蔽的问题:某些 Linux 环境(如 Alpine)默认没装 fontconfig,imagettfbbox() 返回负值,导致文字位置计算崩掉。不用硬扛,直接关掉文字渲染,或改用已知可用的英文字体路径,比如 /usr/share/fonts/ttf-dejavu/DejaVuSans.ttf。
- 想加底部数字,别用系统默认字体,显式指定绝对路径的 .ttf 文件
- 中文内容不建议塞进条码内容字段——
CODE128不支持中文,强行传会编码失败 - 如果只是要「显示中文说明」,那是 HTML 层的事,跟条码图本身无关
扫码识别不了?先看这三件事
生成的图看起来没问题,但微信/支付宝/专用扫码枪扫不出来,90% 是图像质量或尺寸问题,不是代码逻辑错。
generate() 输出的是无抗锯齿的位图,如果 module width 设成 1,条纹太细,手机摄像头自动降噪会直接抹掉;反过来设成 10,又可能超出扫码区域容忍范围。另外,GD 默认用 imagepng() 压缩等级是 9,高压缩可能引入杂点,干扰识别。
- module width 推荐值:手机扫码用
2~4,工业扫码枪可用1,但必须确保输出分辨率 ≥ 300dpi(即实际像素足够) - 避免用
file_put_contents()直接存图后又用浏览器访问——某些服务器配置会拦截非标准 MIME 的 .png 请求 - 真要调试,把生成的二进制数据 base64 编码后嵌入
<img src="data:image/png;base64,..." alt="php怎么生成条形码_php使用barcode库创建条码【识别】" >,排除文件写入/权限问题
条码不是越清晰越好,是「边缘越锐利、对比度越高、留白越足」越容易扫。留白(quiet zone)至少是 module width 的 10 倍,这点库不自动加,得自己用 imagefilledrectangle() 手动扩边。










