picqer/php-barcode-generator

PHP中一个易于使用、无冗余的条码生成器。从最常见的1D条码标准创建SVG、PNG、JPG和HTML图像。

v3.1.0 2024-09-21 12:50 UTC

README

Build Status Total Downloads Latest Stable Version

这是一个易于使用、无冗余、不依赖框架的PHP条码生成器。它不使用任何composer依赖,只有几个文件。这可能是它成为Packagist上PHP最受欢迎的条码生成器的原因之一。 ;)

它创建SVG、PNG、JPG和HTML图像,源自最常见的1D条码标准。

不支持...

  • 不支持任何二维条码,如QR码。
  • 我们只生成条码的'条'部分,不包含条码下方的文本。如果您想在条码下方添加文本,可以在包的输出中稍后添加。

安装

通过composer安装

composer require picqer/php-barcode-generator

如果您想生成PNG或JPG图像,您还需要在系统上安装GD库或Imagick。

用法

您想要特定类型(例如Code 128或UPC)的条码,以特定图像格式(例如PNG或SVG)。

  • 首先,使用一种条码类型将您想要的条码字符串编码到Barcode对象中。
  • 然后,使用其中一个渲染器渲染Barcode对象中的条形码图像。

"类型"是一个标准,它定义了您可以编码哪些字符以及哪些条形码代表哪个字符。最常用的类型是code 128EAN/UPC。并非所有字符都可以编码到每种条码类型中,并且并非所有条码扫描器都可以读取所有类型。

<?php
require 'vendor/autoload.php';

// Make Barcode object of Code128 encoding.
$barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode('081231723897');

// Output the barcode as HTML in the browser with a HTML Renderer
$renderer = new Picqer\Barcode\Renderers\HtmlRenderer();
echo $renderer->render($barcode);

这将产生这个美妙的图像
Barcode 081231723897 as Code 128

每个渲染器都有自己的选项。例如,您可以设置PNG的高度、宽度和颜色

<?php
require 'vendor/autoload.php';

$colorRed = [255, 0, 0];

$barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode('081231723897');
$renderer = new Picqer\Barcode\Renderers\PngRenderer();
$renderer->setForegroundColor($colorRed);

// Save PNG to the filesystem, with widthFactor 3 and height of 50 pixels
file_put_contents('barcode.png', $renderer->render($barcode, 3, 50));

图像渲染器

可用的图像渲染器:SVG、PNG、JPG和HTML。

每个渲染器都有自己的选项。只需提供条码即可,其余的是可选的。以下是每个渲染器的所有选项

SVG

基于向量的SVG图像。打印质量最佳。

$renderer = new Picqer\Barcode\Renderers\SvgRenderer();
$renderer->setForegroundColor('red'); // Give a color for the bars, default is black
$renderer->setBackgroundColor('blue'); // Give a color for the background, default is transparent
$renderer->setSvgType($renderer::TYPE_SVG_INLINE); // Changes the output to be used inline inside HTML documents, instead of a standalone SVG image (default)
$renderer->setSvgType($renderer::TYPE_SVG_STANDALONE); // If you want to force the default, create a stand alone SVG image

$renderer->render($barcode, 450.20, 75); // Width and height support floats

PNG + JPG

PNG和JPG的所有选项都相同。

$renderer = new Picqer\Barcode\Renderers\PngRenderer();
$renderer->setForegroundColor([255, 0, 0]); // Give a color for the bars, default is black. Give it as 3 times 0-255 values for red, green and blue. 
$renderer->setBackgroundColor([0, 255, 255]); // Give a color for the background, default is transparent (in PNG) or white (in JPG). Give it as 3 times 0-255 values for red, green and blue. 
$renderer->useGd(); // If you have Imagick and GD installed, but want to use GD
$renderer->useImagick(); // If you have Imagick and GD installed, but want to use Imagick

$renderer->render($barcode, 5, 40); // Width factor (how many pixel wide every bar is), and the height in pixels

HTML

提供HTML以在完整的HTML文档中使用内联。

$renderer = new Picqer\Barcode\Renderers\HtmlRenderer();
$renderer->setForegroundColor('red'); // Give a color for the bars, default is black
$renderer->setBackgroundColor('blue'); // Give a color for the background, default is transparent

$renderer->render($barcode, 450.20, 75); // Width and height support floats

动态HTML

在此处提供HTML,条码使用完整的宽度和高度,以放入具有固定大小的容器/div中。

$renderer = new Picqer\Barcode\Renderers\DynamicHtmlRenderer();
$renderer->setForegroundColor('red'); // Give a color for the bars, default is black
$renderer->setBackgroundColor('blue'); // Give a color for the background, default is transparent

$renderer->render($barcode);

您可以将渲染的HTML放入一个div中,如下所示

<div style="width: 400px; height: 75px"><?php echo $renderedBarcode; ?></div>

支持的条码类型

这些条码类型受到支持。所有类型支持不同的字符集,其中一些有强制长度。请参阅维基百科了解每种类型的支持字符和长度。

您可以在src/Types文件夹中找到所有支持的类型。

最常用的类型是TYPE_CODE_128和TYPE_CODE_39。由于最好的扫描器支持、可变长度和最多字符支持。

  • TYPE_CODE_32(意大利药品代码'MINSAN')
  • TYPE_CODE_39
  • TYPE_CODE_39_CHECKSUM
  • TYPE_CODE_39E
  • TYPE_CODE_39E_CHECKSUM
  • TYPE_CODE_93
  • TYPE_STANDARD_2_5
  • TYPE_STANDARD_2_5_CHECKSUM
  • TYPE_INTERLEAVED_2_5
  • TYPE_INTERLEAVED_2_5_CHECKSUM
  • 类型代码_128
  • 类型代码_128_A
  • 类型代码_128_B
  • 类型代码_128_C
  • 类型EAN_2
  • 类型EAN_5
  • 类型EAN_8
  • 类型EAN_13
  • 类型ITF14(也称为GTIN-14)
  • 类型UPC_A
  • 类型UPC_E
  • 类型MSI
  • 类型MSI校验和
  • 类型POSTNET
  • 类型PLANET
  • 类型RMS4CC
  • 类型KIX
  • 类型IMB
  • 类型CODABAR
  • 类型代码_11
  • 类型PHARMA_CODE
  • 类型PHARMA_CODE_TWO_TRACKS

请查看示例图片以了解所有支持的条码类型

关于PNG和JPG图像的说明

如果您想使用PNG或JPG图像,您需要安装ImagickGD库。此软件包将使用已安装的Imagick,或者回退到GD。如果您已安装两者,但想使用特定方法,可以使用$renderer->useGd()$renderer->useImagick()来强制您的偏好。

示例

HTML中的嵌入式PNG图像

$barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode('081231723897');
$renderer = new Picqer\Barcode\Renderers\PngRenderer();
echo '<img src="data:image/png;base64,' . base64_encode($renderer->render($barcode)) . '">';

将JPG条码保存到磁盘

$barcode = (new Picqer\Barcode\Types\TypeCodabar())->getBarcode('081231723897');
$renderer = new Picqer\Barcode\Renderers\JpgRenderer();

file_put_contents('barcode.jpg', $renderer->render($barcode));

一行SVG输出到磁盘

file_put_contents('barcode.svg', (new Picqer\Barcode\Renderers\SvgRenderer())->render((new Picqer\Barcode\Types\TypeKix())->getBarcode('6825ME601')));

升级到v3

从v2升级到v3时无需更改任何内容。上面您可以看到自v3以来使用此库的新首选方法。但旧样式仍然有效。

如果您想转换为新样式,这里有一个示例

// Old style
$generator = new Picqer\Barcode\BarcodeGeneratorSVG();
echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128);

// New style
$barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode('081231723897');
$renderer = new Picqer\Barcode\Renderers\SvgRenderer();
echo $renderer->render($barcode);

SVG和HTML渲染器中的宽度现在是最终结果的宽度,而不是宽度系数。如果您想保持动态宽度,可以获取编码条码的宽度并将其乘以宽度系数,以获得与之前相同的结果。有关2的宽度系数的示例,请参见此处

// Old style
$generator = new Picqer\Barcode\BarcodeGeneratorSVG();
echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128, 2. 30);

// New style
$barcode = (new Picqer\Barcode\Types\TypeCode128())->getBarcode('081231723897');
$renderer = new Picqer\Barcode\Renderers\SvgRenderer();
echo $renderer->render($barcode, $barcode->getWidth() * 2, 30);

以前的样式生成器

在版本3中,条码类型编码器和图像渲染器完全分离。这使得构建自己的渲染器变得更加容易。旧方法使用“生成器”。以下是这些生成器的旧示例,它们在v3中也有效。

用法

初始化您想要的输出条码生成器,然后多次调用->getBarcode()例程。

<?php
require 'vendor/autoload.php';

// This will output the barcode as HTML output to display in the browser
$generator = new Picqer\Barcode\BarcodeGeneratorHTML();
echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128);

这将产生这个美妙的图像
Barcode 081231723897 as Code 128

getBarcode()方法接受以下参数

  • $barcode 需要编码到条码中的字符串
  • $type 条码类型,使用类中定义的常量
  • $widthFactor 宽度基于数据长度,使用此系数可以将条码条更宽于默认值
  • $height 条码的总高度(以像素为单位)
  • $foregroundColor 作为字符串的十六进制代码,或RGB数组的颜色(前景颜色)

使用所有参数的示例

<?php

require 'vendor/autoload.php';

$redColor = [255, 0, 0];

$generator = new Picqer\Barcode\BarcodeGeneratorPNG();
file_put_contents('barcode.png', $generator->getBarcode('081231723897', $generator::TYPE_CODE_128, 3, 50, $redColor));

图像类型

$generatorSVG = new Picqer\Barcode\BarcodeGeneratorSVG(); // Vector based SVG
$generatorPNG = new Picqer\Barcode\BarcodeGeneratorPNG(); // Pixel based PNG
$generatorJPG = new Picqer\Barcode\BarcodeGeneratorJPG(); // Pixel based JPG
$generatorHTML = new Picqer\Barcode\BarcodeGeneratorHTML(); // Pixel based HTML
$generatorHTML = new Picqer\Barcode\BarcodeGeneratorDynamicHTML(); // Vector based HTML

HTML中的嵌入式PNG图像

$generator = new Picqer\Barcode\BarcodeGeneratorPNG();
echo '<img src="data:image/png;base64,' . base64_encode($generator->getBarcode('081231723897', $generator::TYPE_CODE_128)) . '">';

将JPG条码保存到磁盘

$generator = new Picqer\Barcode\BarcodeGeneratorJPG();
file_put_contents('barcode.jpg', $generator->getBarcode('081231723897', $generator::TYPE_CODABAR));

一行SVG输出到磁盘

file_put_contents('barcode.svg', (new Picqer\Barcode\BarcodeGeneratorSVG())->getBarcode('6825ME601', Picqer\Barcode\BarcodeGeneratorSVG::TYPE_KIX));

此代码库基于TCPDF条码生成器,由Nicola Asuni创建。因此,该代码在LGPLv3下授权。