这是一个易于使用、不臃肿、独立于框架的 PHP 条形码生成器。它使用零(!)作曲家依赖项,并且只有少数文件。这可能是 Packagist 上下载次数最多的 PHP 条形码生成器的原因。 ;)
它根据最常用的一维条形码标准创建 SVG、PNG、JPG 和 HTML 图像。
不支持任何二维条形码,例如 QR 码。
我们只生成条形码的“条”部分,条形码下方没有文本。如果您想要条形码下方的代码文本,您可以稍后将其添加到此包的输出中。
通过composer安装:
composer require picqer/php-barcode-generator
如果您想生成 PNG 或 JPG 图像,您还需要在系统上安装 GD 库或 Imagick。对于 SVG 或 HTML 渲染,没有依赖性。
您需要特定图像格式(例如 PNG 或 SVG)的特定“类型”(例如 Code 128 或 UPC)的条形码。
首先,使用其中一种条形码类型将您想要条形码的字符串编码到Barcode
对象中。
然后,使用渲染器之一渲染Barcode
对象中的条形图像。
“类型”是一个标准,它定义了可以编码哪些字符以及哪些条代表哪个字符。最常用的类型是代码 128 和 EAN/UPC。并非所有字符都可以编码为每种条形码类型,并且并非所有条形码扫描仪都可以读取所有类型。
<?phprequire 'vendor/autoload.php';// 制作 Code128 编码的 Barcode 对象。$barcode = (new PicqerBarcodeTypesTypeCode128())->getBarcode('081231723897');// 在浏览器中以 HTML 形式输出条形码HTML 渲染器$renderer = new PicqerBarcodeRenderersHtmlRenderer();echo $渲染器->渲染($条形码);
会产生这样的美感:
每个渲染器都有自己的选项。例如,您可以设置 PNG 的高度、宽度和颜色:
<?phprequire 'vendor/autoload.php';$colorRed = [255, 0, 0];$barcode = (new PicqerBarcodeTypesTypeCode128())->getBarcode('081231723897');$renderer = new PicqerBarcodeRenderersPngRenderer();$renderer ->setForegroundColor($colorRed);//保存PNG到文件系统,宽度因子为 3(条形码的宽度 x 3),高度为 50 像素file_put_contents('barcode.png', $renderer->render($barcode, $barcode->getWidth() * 3, 50));
可用的图像渲染器:SVG、PNG、JPG 和 HTML。
它们都符合 RendererInterface 并具有相同的render()
方法。一些渲染器还通过 set*() 方法提供额外的选项。
render() 方法需要 Barcode 对象、宽度和高度。对于 JPG/PNG 图像,只有当您给出的宽度是 Barcode 对象宽度的一个因子时,您才能获得有效的条形码。这就是为什么示例显示$barcode->getWidth() * 2
使图像的像素宽度是条形码数据宽度的 2 倍。您可以指定任意数字作为宽度,图像将尽可能最佳地缩放,但如果没有抗锯齿,它将不会完全有效。
HTML 和 SVG 渲染器可以处理任何宽度和高度,甚至是浮动。
以下是每个渲染器的所有选项:
基于矢量的 SVG 图像。提供最佳的打印质量。
$renderer = new PicqerBarcodeRenderersSvgRenderer();$renderer->setForegroundColor([255, 0, 0]); // 为条形指定红色,默认为黑色。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->setBackgroundColor([0, 0, 255]); // 为背景指定蓝色,默认为透明。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $renderer->setSvgType($renderer::TYPE_SVG_INLINE); // 更改在 HTML 文档中内联使用的输出,而不是独立的 SVG 图像(默认)$renderer->setSvgType($renderer::TYPE_SVG_STANDALONE); // 如果您想强制使用默认值,请创建一个独立的 SVG 图像$renderer->render($barcode, 450.20, 75); // 宽度和高度支持浮动
PNG 和 JPG 的所有选项都是相同的。
$renderer = new PicqerBarcodeRenderersPngRenderer();$renderer->setForegroundColor([255, 0, 0]); // 指定条形的颜色,默认为黑色。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->setBackgroundColor([0, 255, 255]); // 指定背景颜色,默认为透明(PNG)或白色(JPG)。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->useGd(); // 如果你安装了Imagick和GD,但想使用GD$renderer->useImagick(); // 如果你安装了 Imagick 和 GD,但想使用 Imagick$renderer->render($barcode, 5, 40); // 宽度因子(每个条形有多少像素宽)和高度(以像素为单位)
使 HTML 在完整的 HTML 文档中内联使用。
$renderer = new PicqerBarcodeRenderersHtmlRenderer();$renderer->setForegroundColor([255, 0, 0]); // 为条形指定红色,默认为黑色。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->setBackgroundColor([0, 0, 255]); // 为背景指定蓝色,默认为透明。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->渲染($条形码, 450.20, 75); // 宽度和高度支持浮动
此处给出 HTML,条形码使用完整的宽度和高度,放入具有固定大小的容器/div 内。
$renderer = new PicqerBarcodeRenderersDynamicHtmlRenderer();$renderer->setForegroundColor([255, 0, 0]); // 为条形指定红色,默认为黑色。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->setBackgroundColor([0, 0, 255]); // 为背景指定蓝色,默认为透明。将其指定为红色、绿色和蓝色的 3 倍 0-255 值。 $渲染器->渲染($条形码);
您可以将渲染的 HTML 放入 div 中,如下所示:
<div style="width: 400px; height: 75px"><?php echo $renderedBarcode; ?></div>
支持这些条形码类型。所有类型都支持不同的字符集,有些类型具有强制长度。请参阅维基百科了解每种类型支持的字符和长度。
您可以在 src/Types 文件夹中找到所有支持的类型。
最常用的类型是 TYPE_CODE_128 和 TYPE_CODE_39。由于最好的扫描仪支持、可变长度和支持的大多数字符。
TYPE_CODE_32(意大利药品代码“MINSAN”)
类型_代码_39
TYPE_CODE_39_CHECKSUM
TYPE_CODE_39E
TYPE_CODE_39E_CHECKSUM
类型_代码_93
TYPE_STANDARD_2_5
TYPE_STANDARD_2_5_CHECKSUM
TYPE_INTERLEAVED_2_5
TYPE_INTERLEAVED_2_5_CHECKSUM
类型_代码_128
TYPE_CODE_128_A
TYPE_CODE_128_B
TYPE_CODE_128_C
TYPE_EAN_2
TYPE_EAN_5
TYPE_EAN_8
TYPE_EAN_13
TYPE_ITF14(也称为 GTIN-14)
TYPE_UPC_A
TYPE_UPC_E
类型_MSI
类型_MSI_校验和
类型_POSTNET
类型_PLANET
类型_RMS4CC
类型_KIX
类型_IMB
TYPE_CODABAR
类型_代码_11
TYPE_PHARMA_CODE
TYPE_PHARMA_CODE_TWO_TRACKS
请参阅示例图像以了解所有支持的条形码类型
如果要使用PNG或JPG图像,则需要安装Imagick或GD库。如果已安装,此软件包将使用 Imagick,或者回退到 GD。如果两者都安装了,但您想要特定的方法,您可以使用$renderer->useGd()
或$renderer->useImagick()
来强制您的偏好。
$barcode = (new PicqerBarcodeTypesTypeCode128())->getBarcode('081231723897');$renderer = new PicqerBarcodeRenderersPngRenderer();echo '<img src="data:image/png;base64,' .base64_encode($renderer->render ($条形码, $条形码->getWidth() * 2)) 。
$barcode = (new PicqerBarcodeTypesTypeCodabar())->getBarcode('081231723897');$renderer = new PicqerBarcodeRenderersJpgRenderer();file_put_contents('barcode.jpg', $renderer->render($barcode, $barcode->getWidth()) * 2));
file_put_contents('barcode.svg', (new PicqerBarcodeRenderersSvgRenderer())->render((new PicqerBarcodeTypesTypeKix())->getBarcode('6825ME601')));
从 v2 升级到 v3 时无需更改任何内容。在上面您可以找到自 v3 以来使用该库的新首选方式。但旧的风格仍然有效。
为了给渲染器提供相同的界面,现在始终使用 RGB 颜色数组来设置颜色。如果您使用旧的 BarcodeGenerator* 类并使用带有名称(“red”)或十六进制代码(#3399ef)的颜色,这些颜色将使用 ColorHelper 进行转换。支持所有十六进制代码,但对于颜色名称,仅支持基本颜色。
如果您想转换为新样式,这里有一个示例:
// 旧样式$generator = new PicqerBarcodeBarcodeGeneratorSVG();echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128);// 新样式$barcode = (new PicqerBarcodeTypesTypeCode128())->getBarcode('081231723897' );$渲染器=新的PicqerBarcodeRenderersSvgRenderer();echo $renderer->render($barcode);
渲染器中的宽度现在是最终结果的宽度,而不是 widthFactor。如果您想保持动态宽度,您可以获取编码条形码的宽度并将其乘以 widthFactor 以获得与之前相同的结果。请参阅此处 widthFactor 为 2 的示例:
// 旧样式$generator = new PicqerBarcodeBarcodeGeneratorSVG();echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128, 2. 30);// 新样式$barcode = (new PicqerBarcodeTypesTypeCode128())->getBarcode('081231723897');$renderer = new PicqerBarcodeRenderersSvgRenderer();echo $renderer->render($barcode, $barcode->getWidth() * 2, 30);
在版本 3 中,条形码类型编码器和图像渲染器是完全分开的。这使得构建您自己的渲染器变得更加容易。旧的方法是使用“生成器”。下面是这些生成器的旧示例,它们在 v3 中仍然有效。
启动条形码生成器以获得所需的输出,然后根据需要多次调用 ->getBarcode() 例程。
<?phprequire 'vendor/autoload.php';// 这会将条形码作为 HTML 输出显示在浏览器中$generator = new PicqerBarcodeBarcodeGeneratorHTML();echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128 );
会产生这样的美感:
getBarcode()
方法接受以下参数:
$barcode
条形码中编码所需的字符串
$type
条形码类型,使用类中定义的常量
$widthFactor
宽度基于数据的长度,使用此因子可以使条形码条比默认值更宽
$height
条形码的总高度(以像素为单位)
$foregroundColor
十六进制代码,作为条形颜色(前景色)的字符串或 RGB 数组
所有参数的使用示例:
<?phprequire 'vendor/autoload.php';$redColor = [255, 0, 0];$generator = new PicqerBarcodeBarcodeGeneratorPNG();file_put_contents('barcode.png', $generator->getBarcode('081231723897', $generator ::TYPE_CODE_128, 3, 50, $redColor));
$generatorSVG = new PicqerBarcodeBarcodeGeneratorSVG(); // 基于矢量的 SVG$generatorPNG = new PicqerBarcodeBarcodeGeneratorPNG(); // 基于像素的 PNG$generatorJPG = new PicqerBarcodeBarcodeGeneratorJPG(); // 基于像素的 JPG$generatorHTML = new PicqerBarcodeBarcodeGeneratorHTML(); // 基于像素的 HTML$generatorHTML = new PicqerBarcodeBarcodeGeneratorDynamicHTML(); // 基于向量的 HTML
$generator = new PicqerBarcodeBarcodeGeneratorPNG();echo '<img src="data:image/png;base64,' .base64_encode($generator->getBarcode('081231723897', $generator::TYPE_CODE_128)) . '">';
$generator = new PicqerBarcodeBarcodeGeneratorJPG();file_put_contents('barcode.jpg', $generator->getBarcode('081231723897', $generator::TYPE_CODABAR));
file_put_contents('barcode.svg', (new PicqerBarcodeBarcodeGeneratorSVG())->getBarcode('6825ME601', PicqerBarcodeBarcodeGeneratorSVG::TYPE_KIX));
该代码库基于 Nicola Asuni 的 TCPDF 条形码生成器。因此,该代码已根据 LGPLv3 获得许可。