目前主流且维护活跃、能用 composer require 一键安装的条形码库只有 picqer/php-barcode-generator,支持 EAN-13、UPC-A、CODE128 等 10+ 格式,输出 PNG/SVG/HTML,要求 PHP ≥7.4 且必须启用 GD 扩展。

composer require 能直接装的 Barcode 库有哪些
目前主流、维护活跃、能用 composer require 一键安装的条形码生成库,真正靠谱的只有两个:picqer/php-barcode-generator 和 tecnickcom/tcpdf(仅含简单 CODE128/QR 支持)。前者专注条形码,API 清晰;后者是 PDF 类库,条形码只是附带功能,不推荐专为生成条形码引入。
别试 phpclasses/barcode 或已归档的 dwyl/qr-code(它只做 QR,不是通用条形码),也别找没发布到 Packagist 的私有 fork——Composer 找不到。
-
picqer/php-barcode-generator支持 EAN-13、UPC-A、CODE128、ITF-14、CODABAR 等 10+ 格式,输出 PNG/SVG/HTML - 要求 PHP >= 7.4,依赖 GD 扩展(
gd)或 Imagick(可选) - 安装命令就是:
composer require picqer/php-barcode-generator
GD 扩展没启用会导致 generate() 报错“Call to undefined function imagecreate()”
这是最常卡住的地方:库装上了,一调 generate() 就崩,错误信息里带 imagecreate() 或 imagecolorallocate(),说明 GD 没开。
- Linux(CLI 模式)检查:
php -m | grep gd;没输出就需装扩展,如 Ubuntu 执行sudo apt install php-gd,然后重启 PHP-FPM 或 Apache - Windows 用户确认
php.ini中extension=gd未被注释,且对应 DLL 存在 - Docker 用户要在
Dockerfile中加docker-php-ext-install gd,不能只写apt install - 临时绕过 GD?不行。这个库的 PNG 输出强制依赖 GD;SVG 输出虽不依赖 GD,但默认构造器仍会尝试初始化 GD 上下文
生成 CODE128 条形码时传错参数会返回空字符串而非报错
generate() 方法对输入非常宽容:传空字符串、含非法字符(如中文)、长度超限,它不会 throw Exception,而是静默返回空 string 或损坏图像。调试时容易误以为“代码没执行”。
- CODE128 只接受 ASCII 字符(0–127),数字/字母/常见符号 OK,但
®、€、中文全都不行 - 校验位由库自动计算,你不用手算,但必须确保原始数据符合规范(例如 UPC-A 必须是 11 位数字,库才补第 12 位校验码)
- 安全做法:生成前先用
ctype_print($data) && strlen($data) 做基础过滤,再base64_encode()或哈希后生成(如果业务允许) - 示例正确调用:
$generator = new \Picqer\Barcode\BarcodeGeneratorPNG(); $barcode = $generator->generate('123456789012', \Picqer\Barcode\BarcodeGenerator::TYPE_CODE_128);
输出到浏览器时 header 顺序和 MIME type 容易出错
想直接在浏览器显示条形码图片,header() 必须在任何输出(包括空格、BOM、echo)之前调用,且 MIME type 必须匹配生成格式。
- PNG 输出必须用
header('Content-Type: image/png');,写成image/PNG或image/x-png在某些浏览器会下载而非显示 - 如果用了 Twig / Blade 模板、或前面有
var_dump()、甚至文件开头有 UTF-8 BOM,都会导致 “headers already sent” 错误 - 更稳的方式是先生成二进制数据,再统一输出:
$pngData = $generator->getBarcode($data, $type); header('Content-Type: image/png'); echo $pngData; - 别用
readfile()或临时文件——没必要,内存中操作更快也更干净










