picqer / php-barcode-generator
PHP中一个易于使用、无冗余的条码生成器。从最常见的1D条码标准创建SVG、PNG、JPG和HTML图像。
Requires
- php: ^8.2
- ext-mbstring: *
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.5
Suggests
- ext-bcmath: Barcode IMB (Intelligent Mail Barcode) needs bcmath extension
- ext-gd: For JPG and PNG generators, GD or Imagick is required
- ext-imagick: For JPG and PNG generators, GD or Imagick is required
README
这是一个易于使用、无冗余、不依赖框架的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 128和EAN/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);
每个渲染器都有自己的选项。例如,您可以设置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图像,您需要安装Imagick或GD库。此软件包将使用已安装的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);
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下授权。