使用 PHP 类库 PHP QR Code 生成二维码

教程分享评论5751字数 3380阅读模式

PHP QR Code 是一个 PHP 二维码生成类库,利用它我们可以很轻松地生成二维码,本站近期新增了一个扫二维码在手机端查看的功能,所以,想顺便分享一下使用 PHP 类库 PHP QR Code 生成二维码的实现方法,PHP 环境需要开启支持 GD2 扩展库支持,一般情况下都是开启状态。

使用 PHP 类库 PHP QR Code 生成二维码-图片1

实现方法

实现方法很简单,我们只需要下载类库,下载后在接口文件中引用即可。

官网地址:http://phpqrcode.sourceforge.net/

类库地址:https://sourceforge.net/projects/phpqrcode/

1、下载类库

从官网下载类库,下载后解压,将 phpqrcode.php 这个文件上传到根目录下,假设根目录为 /www/wwwroot/api/qrcode/,如下图所示:

使用 PHP 类库 PHP QR Code 生成二维码-图片2

2、方法解读

生成二维码用到 phpqrcode.php 文件中的 QRcode 类中的 png() 方法:

public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) 
{
    $enc = QRencode::factory($level, $size, $margin);
    return $enc->encodePNG($text, $outfile, $saveandprint=false);
}
第 1 个参数 $text:二维码包含的内容,可以是链接、文字、json字符串等等;
第 2 个参数 $outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
第 3 个参数 $level:表示容错率,也就是有被覆盖的区域还能识别,有四个值,分别是 L:7%,M:15%,Q:25%,H:30%,默认为 L;
第 4 个参数 $size:控制生成图片的大小,默认为4;
第 5 个参数 $margin:控制生成二维码的空白区域大小;
第 6 个参数 $saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;

3、编写接口文件

在 qrcode 文件夹下新建 api.php 文件,内容如下:

<?php
include 'phpqrcode.php';

$value = "https://www.pieruo.com/215.html";
$errorCorrectionLevel = 'L'; //容错级别 
$matrixPointSize = 6; //生成图片大小

// 生成二维码图片 
//$filename = 'images/'.time().'.png'; // 指定存放目录,需手动新建该目录
$filename = 'qrcode.png';
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
// 输出二维码图片
echo '<img src="qrcode.png">';

4、浏览器访问

在浏览器中访问 https://api.pieruo.com/qrcode/api.php, 域名换成自己的,在浏览器中会展示生成的二维码图片,另外,该图片会保存到 qrcode 文件夹下。

预览效果如下 :

使用 PHP 类库 PHP QR Code 生成二维码-图片3

生成带 LOGO 的二维码

如果想生成带 LOGO 的二维码,可以使用上文中的方法先生成二维码图片,然后利用 PHP 的 image 相关函数,将 LOGO 合成到二维码图片中,重新生成一张新的图片。

1、实现方法及代码

需要将准备好的 LOGO 图片上传到根目录下,参考代码如下:

<?php 
include 'phpqrcode.php';

$value = 'https://www.pieruo.com/216.html';
$errorCorrectionLevel = 'Q';//容错级别
$matrixPointSize = 6;//生成图片大小

QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2);

//生成二维码图片
$logo = 'logo.png';//准备好的logo图片
$QR = 'qrcode.png';//已经生成的原始二维码图

if ($logo !== FALSE) {
    $QR = imagecreatefromstring(file_get_contents($QR));
    $logo = imagecreatefromstring(file_get_contents($logo));
    $QR_width = imagesx($QR);//二维码图片宽度
    $QR_height = imagesy($QR);//二维码图片高度
    $logo_width = imagesx($logo);//logo图片宽度
    $logo_height = imagesy($logo);//logo图片高度
    $logo_qr_width = $QR_width / 5; 
    $scale = $logo_width/$logo_qr_width;
    $logo_qr_height = $logo_height/$scale;
    $from_width = ($QR_width - $logo_qr_width) / 2;
    //重新组合图片并调整大小
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
    $logo_qr_height, $logo_width, $logo_height);
}
//输出图片
imagepng($QR, 'qrcodelogo.png');

// 输出二维码图片
echo '<img src="qrcodelogo.png">';

2、预览效果

在浏览器中访问,效果如下:

使用 PHP 类库 PHP QR Code 生成二维码-图片4

温馨提示:如果生成的二维码无法识别,可以将容错级别调大一点。

补充说明

在官方的示例 DEMO 中,我们可以得知,除了引 phpqrcode.php 文件外,还可以引用 qrlib.php 这个文件,推荐引用 qrlib.php  的形式生成二维码

1、官方用例

关于这两个文件,官方说明如下:

/**
 *  qrlib.php for full version (also you have to provide all library files form package plus cache dir)
 *  OR phpqrcode.php for merged version (only one file, but slower and less accurate code because disabled cache and quicker masking configured)
*/

这两句话解释:

# 包含 qrlib.php 的话需要提供全部的类库文件,需要我们上传整个类库文件夹。 
# phpqrcode.php 是合并后版本,只需要包含这个文件,但生成的图片速度慢而且不太准确。

2、说明事项

从上述解释我们已经知道,引用 qrlib.php 文件的话,需要上传整个类库文件夹:

使用 PHP 类库 PHP QR Code 生成二维码-图片5

3、参考代码

引用 qrlib.php (需要上传整个类库文件夹),参考代码如下:

<?php
include './phpqrcode/qrlib.php'; 

$value = "https://www.pieruo.com/215.html";
$errorCorrectionLevel = 'L'; //容错级别 
$matrixPointSize = 6; //生成图片大小

// 生成二维码图片 
$filename = 'qrcode.png';
// $filename = dirname(__FILE__) . DIRECTORY_SEPARATOR. 'images'. DIRECTORY_SEPARATOR . time() . '.jpg'; // 指定存放目录,需要使用绝对路径
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
// 输出二维码图片
echo '<img src="qrcode.png">';

结束语

使用 PHP QR Code 类库我们可以很轻松地将链接、文字以及图片等生成二维码,二维码是动态的,可以不用在本地生成图片,支持自定义二维码大小,边距,跳转地址等。如果有任何意见或建议,欢迎在下方评论处留言。

本文已通过「原本」原创作品认证,转载请注明文章出处及链接。

夏日阳光
  • 本文由 夏日阳光 发表于 2022年6月1日
  • 本文为夏日阳光原创文章,转载请务必保留本文链接:https://www.pieruo.com/215.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证