欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php生成条形码和二维码(php)

程序员文章站 2024-01-27 12:04:22
...

导言

现在条形码和二维码已经在我们的生活中随处可见了,所以今天就来分享一下怎么去生成符合我们需求的条形码二维码。

条形码的生成

说到php生成的条形码,就不得不提到一个很好用的类库,barcode。
首先,我们可以到官网去下载最新的代码类库。
选择我们需要的版本和类型,我这边用的是php的7.3.4,所以我下载的6.0.0版本。
文件下载好了,他里面有两个目录,我们直接进入到example目录内,打开code文件,找到我们需要的条形码类型,这里我需要的是CODE128,所以 很简单,只需要打开test_code128.php,将其中内容复制出来,粘贴到我们需要使用的地方。

barcode官网php生成条形码和二维码(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);
	}