如何在 PHP 中生成二维码
原生 PHP 无法直接生成二维码,可以借助一些第三方的二维码库。这里使用 endroid/qr-code。
安装:
1
| composer require endroid/qr-code
|
首先来了解一下二维码的一些基本特征
这是一张常见的二维码,由以下几部分构成:
- ①:外框
- ②:码眼
- ③:码点
- ④:logo
- ⑤:文字
其中码眼和码点是必要的,其余部分则均是为二维码美化的而添加的,非必要。
简单的二维码生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| require "vendor/autoload.php";
use Endroid\QrCode\QrCode; use Endroid\QrCode\Writer\PngWriter;
$qr = QrCode::create("Hello World"); $writer = new PngWriter(); $result = $writer->write($qr);
$result->saveToFile(__DIR__ . "/qr.png");
|
endroid/qr-code
提供三种不同的输出模式:
saveToFile()
:生成二维码以图片的形式保存在本地
getString()
:直接输出在浏览器
getDataUri()
:输出二维码图片对应的 Base64
二维码美化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?php require "vendor/autoload.php";
use Endroid\QrCode\QrCode; use Endroid\QrCode\Writer\PngWriter; use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh; use Endroid\QrCode\Color\Color; use Endroid\QrCode\Logo\Logo; use Endroid\QrCode\Label\Label;
$qr = QrCode::create("Hello World") ->setErrorCorrectionLevel(new ErrorCorrectionLevelHigh()) ->setSize(300) ->setMargin(10) ->setForegroundColor(new Color(0, 0, 0)) ->setBackgroundColor(new Color(255, 255, 255));
$logo = Logo::create(__DIR__ . "/logo.png") ->setResizeToWidth(70);
$label = Label::create("扫一扫") ->setTextColor(new Color(0, 0, 0));
$writer = new PngWriter(); $result = $writer->write($qr, $logo, $label); header("Content-Type: " . $result->getMimeType()); echo $result->getString();
|
创建二维码时,除了可以放文本,还可以放入 URL、邮箱、深度链接等等。
其他问题
endroid/qr-code 似乎不支持外框、码眼、码点的自定义,具体可以查看这个 Issue。
参考链接