如何用PHPQRCode开源库在PHP中生成二维码

PHP生成二维码的必要条件

  • PHP环境开启GD2扩展
  • 引用第三方的二维码库

1、第三方库文件下载

库名称:phpqrcode,这是一个开源的库。下载地址:https://sourceforge.net/projects/phpqrcode/

下载回来的压缩包里一大堆文件,我们只用其中一个:phpqrcode.php 这个文件里包含了生成二维码的所有代码,就是同级目录里的其他文件,如果你感兴趣也可以一个个的添加和调用。

我们只需要PHPQRCode.php这一个文件,把这个文件拷贝到你的项目文件夹

2、如何调用库函数

function qrcode($url){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = 'L';  //容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//调用查看结果
qrcode('https://www.baidu.com');

上面代码中,单次引用了phpqrcode.php库文件,然后,传入url参数,注意函数的用法:

QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
  • 参数1:$value:是二维码的内容
  • 参数2:$outfile:本例是false,这默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
  • 参数3:$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
  • 参数4:$size:控制生成图片的大小,默认为4;
  • 参数5:$margin:控制生成二维码的空白区域大小;
  • 参数6:$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
请注意:以上代码执行后会直接在浏览器显示一个二维码图片,如果在你的php页面调用qrcode()函数,则会出现错误。

3、如何在页面中调用二维码图片

因为上面的代码生成的数据格式不是html格式的,当在html页面直接调用qrcode函数时会发生headers信息错误,导致二维码不显示。正确的做法是在需要展示二维码的地方,用一个img标签,src属性是包含qrcode函数的php文件。

<img src="qrcode.php" />

如果要生成动态的二维码,还可以给qrcode.php传递参数,或者通过其他方式获取数据,这部分就很灵活了。

4、如何在服务器生成一个二维码文件

这样的需求可能不多,但也不复杂,只需要给第二个参数,传递位置信息就可以了。

function qrcode1($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = 'L';  //容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';       //
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $QR = $filename;        //已经生成的原始二维码图片文件
  $QR = imagecreatefromstring(file_get_contents($QR));
  //输出图片
  imagepng($QR,'qrcode.png');
  imagedestroy($QR);
  return '<img src="qrcode.png">';
}
//调用查看结果
echo qrcode1('https://www.baidu.com');

这个函数会在当前目录下的qrcode目录生成二维码文件。然后用img标签显现出来,这个函数可以再php页面中直接调用。

发表评论