PHP基于phpqrcode类生成二维码

使用ThinkPHP框架引入phpqrcode类生成二维码后,发现每次必须通过TP框架生成,略显繁琐,打算写一个简单的方法,然后运行php后直接批量生成二维码。方法也简单,直接写个PHP脚本,然后引入phpqrcode类,然后在写个方法直接调用方法即可。

一、前期准备

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

二、方法解读

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

<?php
//...省略代码...
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. 生成一张二维码(生成图片文件)

<?php
header("content-type:text/html;charset=utf-8");
//引入phpqrcode类文件
require_once 'phpqrcode.php';
//  生成原始的二维码(生成图片文件)
function scerweima($url=''){$value = $url;         //二维码内容$errorCorrectionLevel = 'L';  //容错级别$matrixPointSize = 11;      //生成图片大小//1、创建二维码图片保存目录$dir = 'qrcode';if(!is_dir($dir)){mkdir($dir,0777,true);}//2、生成二维码图片$filename = $dir.'/'.$value.'.png';QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 1);$QR = $filename;        //已经生成的原始二维码图片文件$QR = imagecreatefromstring(file_get_contents($QR));//输出图片//1、以 PNG 格式将图像输出到浏览器或输出文件到指定目录imagepng($QR, 'qrcode.png');//2、释放有关二维码图片的内存imagedestroy($QR);//3、web页面上显示图片return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima('123456');

2、批量生成二维码

<?php
header("content-type:text/html;charset=utf-8");
require_once 'phpqrcode.php';
// 1. 生成原始的二维码(生成图片文件)
function scerweima($url=''){$value = $url;         //二维码内容$errorCorrectionLevel = 'L';  //容错级别$matrixPointSize = 11;      //生成图片大小//1、创建二维码图片保存目录$dir = 'qrcode';if(!is_dir($dir)){mkdir($dir,0777,true);}//生成二维码图片$filename = $dir.'/'.$value.'.png';QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 1);
}
//调用查看结果
for($i=10001;$i<=10500;$i++){$code = '370125';$code .= $i;scerweima($code);
}

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

<?php
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('123456');

4、生成二维码(不生成图片文件)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求最大公约数——欧几里得算法(JAVA)

欧几里得算法 问题描述&#xff1a;给出两个数m&#xff0c;n&#xff0c;求解这两个数的最大公因数 由于算法比较简单&#xff0c;这里不再赘述&#xff0c;我做的这个算法是默认了m>n,如果是对于任意两个数来说的话&#xff0c;我们这里还需要一个比较大小。 public cla…

编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。...

function digit(num,k){var knum 0;for(var i1; i<k; i){knum num%10;num parseInt(num/10);}return knum;}转载于:https://www.cnblogs.com/tis100204/p/10310140.html

JS/jQuery添加和移除CSS样式

有时候需要添加CSS样式和移除CSS样式&#xff0c;如添加display属性&#xff0c;设为隐藏。有时候需要移除display属性。 一、jQuery移除CSS样式的两种方法 注意&#xff1a;当其中一种不支持时&#xff0c;就尝试另一种&#xff1a; $("#show").removeAttr("…

高效幂运算(JAVA)--拆分解法、二进制解法

高效幂运算 问题描述&#xff1a;假设有一机器能够存储这样一些大整数&#xff08;或有一个编译程序能够模拟它&#xff09;&#xff0c;求一个相对大的数字&#xff08;一般为400位左右&#xff09;的极大幂&#xff08;400位左右&#xff09; 显然我们可以使用Java内置函数p…

动态规划之背包问题(JAVA)

背包问题之前的C语言版本已经将思路解析的差不多&#xff0c;虽然还有些许错误需要改正&#xff0c;但大体思路是正确的&#xff0c;需要的读者请参阅动态规划之背包问题&#xff08;C语言&#xff09; 背包问题本身就是典型的动态规划问题&#xff0c;所以这里只给出动态规划…

PHP常量:define和const的不同之处

&#xff11;、定义   常量是一个简单的标识符。在脚本执行期间该值不能改变&#xff08;除了所谓的魔术常量&#xff0c;他们其实不是常量&#xff09;。常量默认大小写敏感。通常常量标识符总是大写的。   可以用define()函数来定义常量。在php5.3.0以后&#xff0c;可以…

js--a标签带参数href取值

<script type"text/javascript"> $(function(){ //$(div里面a标签的class名字)。attr&#xff08;‘href’&#xff0c;‘路径已经后面带的参数’&#xff09; $(.a).attr(href,/meeting/register_personal/findSeatPhoto.do?actionIdmeeting_register_detail…

斐波那契数列(一)--对比递归与动态规划(JAVA)

兔子繁殖问题&#xff1a; 这是一个有趣的古典数学问题&#xff0c;著名意大利数学家Fibonacci曾提出一个问题&#xff1a;有一对小兔子&#xff0c;从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。按此规律&#xff0c;假设没有兔子死亡&…

MySQL中的char与varchar详解

mysql中char与varchar的区别 char&#xff1a;定长&#xff0c;效率高&#xff0c;一般用于固定长度的表单提交数据存储 &#xff1b;例如&#xff1a;身份证号&#xff0c;手机号&#xff0c;电话&#xff0c;密码等 varchar&#xff1a;不定长&#xff0c;效率偏低 …

C++初步学习

C语言的变量必须在函数开始定义&#xff0c;而C可以边使用变定义C不支持重载&#xff0c;C函数支持重载&#xff0c;函数参数数量不同 或者 函数参数类型不同即可重载C的命名空间C语言不允许使用空的结构体(struct)&#xff0c;C允许使用空的结构体(class)C面向过程&#xff0c…

排序算法(一)--桶排序、冒泡、快排(JAVA)

排序算法汇总 参考书籍–《啊哈&#xff01;算法》 作者&#xff1a;啊哈磊 首先提出一个问题&#xff1a;班内有5名同学&#xff0c;成绩分别为5&#xff0c;8&#xff0c;2&#xff0c;4&#xff0c;2分&#xff08;满分10分&#xff09;&#xff0c;需要将成绩从小到大排序…

apache启动错误 AH00072: make_sock: could not bind to address [::]:443

一、安装apche遇到问题 在电脑上win7系统中安装了wnmp&#xff08;nginxMySQLphp7.2&#xff09;后&#xff0c;想要在安装一套wamp&#xff08;apacheMySQLphp7.2&#xff09;。说做就做&#xff0c;wamp的安装就比较简单了&#xff1a;首先&#xff0c;直接下载apache的压缩包…

Page9:结构分解以及系统内部稳定和BIBO稳定概念及其性质[Linear System Theory]

内容包含系统能控性结构分解、系统能观测性结构分解以及系统结构规范分解原理&#xff0c;线性系统的内部稳定、BIBO稳定概念及其性质 转载于:https://www.cnblogs.com/ERFishing/p/10314720.html

Java集合类及常用数据结构

下面这个图示为JAVA的集合类关系图&#xff0c;没用用严格的UML&#xff0c;了解其中的关系即可&#xff0c;其中颜色强调的几个类为常用的集合类。

win7添加开机启动项

添加开机启动项 开始菜单->所有程序->有个“启动”目录&#xff0c;然后右击选择“打开”&#xff0c;之后把软件的快捷方式移动到此目录下&#xff0c;然后重启电脑&#xff0c;就可以了。 注意&#xff1a;如果修改了程序的安装目录&#xff0c;这里需要删除之前的快捷…

续PA协商过程

续PA协商过程 当sw3的接口恢复之后会发生2中情况。 ①sw3的G0/0/2口先发BPDU ②sw3的G0/0/3口先发BPDU sw3先发送BPDU sw3和sw1的交互过程&#xff1a; sw3的2口恢复后&#xff0c;sw3的所有接口&#xff08;除了边缘端口&#xff09;&#xff0c;变为DP&#xff08;discardi…

搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)

拯救同伴问题 问题描述&#xff1a;假设有如下迷宫&#xff0c;求解从某一点出发到目标位置的最短距离 Input: 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 Output: 7 深度优先搜索&#xff08;DFS&#xff09; import java.util.Scanner;public class DF…

PHP7.2的安装与配置(win7)

1、PHP的安装 1&#xff09;、环境安装目录&#xff1a; C:/wamp/|——php|——php7.2|——Apache24|——mysql|——www2&#xff09;、下载 linux专用&#xff1a;http://www.php.net/downloads.php windows专用&#xff1a;http://windows.php.net/download/ 官网里Windo…

常用类(二)

10.3 可变字符序列&#xff1a;字符串缓冲区 10.3.1 StringBuffer、StringBuilder、String的区别 1、一个类似于 String 的字符串缓冲区&#xff0c;但能被修改。虽然在任意时间点上它都包含某种特定的字符序列&#xff0c;但通过某些方法调用可以改变该序列的长度和内容&#…

搜索算法(二)--DFS/BFS求解炸弹人问题(JAVA )

炸弹人问题 问题描述&#xff1a;小人可以在迷宫中任意地方放置一个炸弹&#xff0c;炸弹可以在以该点为中心的十字方向杀死怪物&#xff0c;但是触碰到墙之后不再能传递攻击。求将一个炸弹放在哪个位置可以杀死更多的怪物&#xff1f;&#xff1f; Input&#xff1a; 13 1…