网络编程
位置:首页>> 网络编程>> php编程>> PHP基于phpqrcode类生成二维码的方法详解

PHP基于phpqrcode类生成二维码的方法详解

作者:江南极客  发布时间:2023-06-12 17:20:38 

标签:PHP,phpqrcode,生成二维码

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:

使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。

前期准备:

1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):


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,这个参数可传递的值分别是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必须传递图片路径;

使用示例:

1. 生成二维码(生成图片文件)


// 1. 生成原始的二维码(生成图片文件)
function scerweima($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" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima('https://www.baidu.com');

2. 在生成的二维码中加上logo(生成图片文件)


//2. 在生成的二维码中加上logo(生成图片文件)
function scerweima1($url=''){
 require_once 'phpqrcode.php';
 $value = $url;         //二维码内容
 $errorCorrectionLevel = 'H';  //容错级别
 $matrixPointSize = 6;      //生成图片大小
 //生成二维码图片
 $filename = 'qrcode/'.microtime().'.png';
 QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
 $logo = 'qrcode/logo.jpg'; //准备好的logo图片
 $QR = $filename;      //已经生成的原始二维码图
 if (file_exists($logo)) {
   $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 / 4;   //组合之后logo的宽度(占二维码的1/5)
   $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
   $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
   $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
   //重新组合图片并调整大小
   /*
    * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    */
   imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
 }
 //输出图片
 imagepng($QR, 'qrcode.png');
 imagedestroy($QR);
 imagedestroy($logo);
 return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima1('https://www.baidu.com');

PHP基于phpqrcode类生成二维码的方法详解

3. 生成二维码(不生成图片文件)


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

前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。

来源:http://blog.csdn.net/sinat_35861727/article/details/73862991

0
投稿

猜你喜欢

  • 这种情况在Access下可以通过,但SQL则不行,在百度搜索解决方法,发现N多人出现同样问题却找不到解决办法: 代码如下:set 
  • 一、使用css缩写使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描
  • 各大著名厂家、公司的banner广告设计欣赏,尺寸468x60,gif格式!有acer,阿尔卡特,AMD,中国电信,爱立信,Greatwal
  • 在页面中自定义了changejs函数后页面提示错误:Active Server Pages 错误 'ASP 0138' 嵌套
  • { hide_text } CSS文字隐藏总结报告最近整理的一份CSS文字隐藏的demo,总结了几种方法,希望得出一种最完美的方案放进自己的
  • 在Web标准中一个很重要的概念就是强调页面的结构与表现分离。说的通俗一点就是XHTML中应该没有样式化的东西,而且Web在浏览器中除内容外都
  • 按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。因此当其高度超出包含
  • 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值。典型的例子就是一个银行账户,因为你每一次都是在不同的时间
  • 这个url的正则表达式判断的js!是比较全面的。它验证的情况包括!IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!
  • 这几个技术都不是很新了,现在还拿出来说也就是为了教教新手了呵呵,各位大虾多多指正.css之所以出现就是为了实现数据与数据的表现形式的分离,
  • 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看 <%   '-------------------
  • 一、常用文件函数库1、basename(); -- 返回路径中的文件名部分。string basename ( string $path [
  • 任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉
  • 我们在编写asp程序时经常会使用到这个功能,一般我们这样判断如:if a="" then ,而这个函数考虑的就比较全面了
  • 主要讲 except 和 not in 的性能上的区别。  代码如下:CREATE TABLE tb1(ID int) CREAT
  • 快捷键可以帮助我们有效提高效率,我们来看看网页设计软件FrontPage有哪些快捷键。相关文章:Dreamweaver快捷键大全、photo
  • MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚。下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里
  • 第一:编写限制搜索范围的查询语句。众所周知,在数据库查询的时候返回记录的多少直接关系到查询的效率。所以,在客户端通过一定的条件语句,限制搜索
  • 我们大家都知道CSS功能的强大,而有关CSS基本的排版控制虽然已有详细的使用说明和参考教程,但还有许多丰富的CSS排版能力,是很少能查到的。
  • 本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义,
手机版 网络编程 asp之家 www.aspxhome.com