php生成条形码和二维码(php)
程序员文章站
2024-01-27 12:04:22
...
导言
现在条形码和二维码已经在我们的生活中随处可见了,所以今天就来分享一下怎么去生成符合我们需求的条形码二维码。
条形码的生成
说到php生成的条形码,就不得不提到一个很好用的类库,barcode。
首先,我们可以到官网去下载最新的代码类库。
选择我们需要的版本和类型,我这边用的是php的7.3.4,所以我下载的6.0.0版本。
文件下载好了,他里面有两个目录,我们直接进入到example目录内,打开code文件,找到我们需要的条形码类型,这里我需要的是CODE128,所以 很简单,只需要打开test_code128.php,将其中内容复制出来,粘贴到我们需要使用的地方。
<?php
header("Access-Control-Allow-Origin: *");
require __DIR__ . '/tiaoma/example/vendor/autoload.php';
use BarcodeBakery\Common\BCGColor;
use BarcodeBakery\Common\BCGDrawing;
use BarcodeBakery\Common\BCGFontFile;
use BarcodeBakery\Barcode\BCGcode128;
// Loading Font
$font = new BCGFontFile(__DIR__ . '/tiaoma/example/font/Arial.ttf', 18);
// Don't forget to sanitize user inputs
$name = $_POST['name'];
$text = empty($name) ? (empty($_GET['name']) ? 'a123' : $_GET['name']) : $name;
//$text = isset($_GET['text']) ? $_GET['text'] : 'a123';
// The arguments are R, G, B for color.
$color_black = new BCGColor(0, 0, 0);
$color_white = new BCGColor(255, 255, 255);
$drawException = null;
try {
$code = new BCGcode128();
$code->setScale(2); // Resolution
$code->setThickness(30); // Thickness
$code->setForegroundColor($color_black); // Color of bars
$code->setBackgroundColor($color_white); // Color of spaces
$code->setFont($font); // Font (or 0)
$code->setStart(null);
$code->setTilde(true);
$code->parse($text); // Text
} catch (Exception $exception) {
$drawException = $exception;
}
/* Here is the list of the arguments
1 - Filename (empty : display on screen)
2 - Background color */
$drawing = new BCGDrawing('', $color_white);
if ($drawException) {
$drawing->drawException($drawException);
} else {
$drawing->setBarcode($code);
$drawing->draw();
}
// Header that says it is an image (remove it if you save the barcode to a file)
//header('Content-Type: image/png');
//header('Content-Disposition: inline; filename="barcode.png"');
// Draw (or save) the image into PNG format.
$drawing->finish(BCGDrawing::IMG_FORMAT_PNG);
?>
这里有个小坑,我这样使用之后,在我的network里面是能够看到生成之后的条形码,但是在控制台打印的时候出现的是一串乱码。
仔细排查之后,发现这样之后我得到的是数据流而不是前端需要的图片地址,于是一阵百度之后,找到了一个合适的方法,修改了一下代码
ob_start();
$drawing->finish(BCGDrawing::IMG_FORMAT_PNG);
$img = ob_get_contents();
ob_end_clean();
$img = 'data:png;base64,' . base64_encode($img); //对生成条形码的数据进行64位编码
ob_flush();
$data = array(
'msg' => 'Success',
'name' => $img,
);
echo json_encode($data);
这样处理之后,前端就能得到需要的图片地址,条形码也能在前端页面上正常显示了。
二维码的生成
在php中,生成二维码最常用的就是qrcode
使用的方法也和barcode类似;
public function drawcode($name='')
{
require_once ROOT . '/core/plugins/qrcode.class.php';
$value = empty($name)? 'no input':$name; //二维码内容
$errorCorrectionLevel = 'L'; //容错级别
$matrixPointSize = 8; //生成图片大小
$qrcode = new QRcode();
ob_start();
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize, 2);
$img = ob_get_contents();
ob_end_clean();
$img = 'data:png;base64,' . base64_encode($img); //对生成二维码的数据进行64位编码
ob_flush();
$data = array(
'msg' => 'Success',
'name' => $img,
);
echo json_encode($data);
}