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

发布于 2022-08-01

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

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

实现方法

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

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

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

1、下载类库

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

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);
}

[mark_a]第 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必须传递图片路径;[/mark_a]

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 文件夹下。

预览效果如下 :

生成带 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、预览效果

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

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

补充说明

在官方的示例 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 文件的话,需要上传整个类库文件夹:

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

喜欢 1
奋楫笃行,臻于至善!

相关文章

亚马逊云服务器免费使用一年最新申请教程

亚马逊云提供了每月 750 个小时的免费云服务器 EC2 使用服务,这对于小白站长来说真的是太香了,可以申请一台  1GB 内存、30GB 硬盘的 云服务器实例,免费使用一年。2019 年就曾写过一篇...
阅读全文

给网站添加随时间变化的动态问候语/欢迎词

我们在访问某些网站的时候,经常会在网站顶部看到动态问候语,比如早晨八点多显示 “早上好,今天又是美好的一天!”,这样做可以很好地提升网站用户体检,所以,今天为大家简单分享一下实现代码,分 JavaSc...
阅读全文

PHP 随机图片接口 API 实现方案及源码分享

之前分享过一篇关于在网站中生成随机句子的文章 WordPress 博客集成 Hitokoto 一言经典语句功能,今天为大家再分享一下生成随机图片的过程,实现方案跟之前的一言生成方法类似,可以快速实现在...
阅读全文

修改 Chevereto 网站标题并让标题支持翻译

Chevereto 是一款优秀的图床程序,我们可以使用它来托管图片。默认情况下,Chevereto 的标题是不支持翻译的,如果我们想实现标题翻译,例如,在简体中文环境下,首页标题展示为 “夏日阳光 -...
阅读全文

如何修改 Chevereto 网站底部的版权说明信息

Chevereto 图床程序页面底部的默认版权信息是 Powered by Chevereto,如果我们想自定义底部的版权信息,比如加上备案号,可以通过修改程序的源代码来实现。本文分享一种比较简单通用...
阅读全文

修改 Chevereto 图床程序 给登录页面添加公共头部和尾部

默认情况下,Chevereto 图床程序注册和登录页面不显示公共头部和尾部,如果我们要显示公共的头部和尾部的话,可以通过修改源码实现。本文简单整理了一下修改的方法,如果你也想在登录页面显示公共头和尾的...
阅读全文

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注