管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
" c1 ^0 X: f) P2 a& e0 B使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
+ @4 P9 t) s0 t: L5 O p前期准备:
4 Z9 E7 t5 f! ]1 ?) w1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2 u+ i6 d' a. v, r3 r 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)/ F- U0 o; F/ {- y
方法解读:7 r- H2 @7 W7 A6 @4 g$ b" \
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):% ~: n- N. s6 w8 y& [; B
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)* [8 \/ s) ?/ N( _ V, M3 N
- {
% l1 j% V+ Y: }. J J+ B ~ - $enc = QRencode::factory($level, $size, $margin);
^7 H9 p, L! h7 [) w" ] - return $enc->encodePNG($text, $outfile, $saveandprint=false);" E! {5 T0 ~& N/ E$ d' P1 I- E
- }3 T' o# b \8 A9 ^: R, l# I3 K
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;+ i) v( @0 C" h! \
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;! q& X; c" f, y" K9 U3 \' H
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;/ K% {2 Z- G9 [) U; F
第4个参数$size:控制生成图片的大小,默认为4;: \: I$ ~& D* P
第5个参数$margin:控制生成二维码的空白区域大小;
2 i& k) \5 u- S. d4 _ 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;& V& T2 w5 ^# Q1 C5 }7 L% E
使用示例:
) \9 Y" ~: @& ^; X" D5 X1. 生成二维码(生成图片文件)4 q# `8 S9 n$ c* S( E" j! g
- // 1. 生成原始的二维码(生成图片文件)
/ [" z. h& e5 O4 r - function scerweima($url=''){+ b9 ^- M! g' p$ P: Y
- require_once 'phpqrcode.php';
5 w; J. M/ N. A# N# U, l! P - $value = $url; //二维码内容
4 z* A7 A! y. d% c1 e. M! Z4 K( z: X - $errorCorrectionLevel = 'L'; //容错级别- Z j i- X" e# ?+ ~: f: X
- $matrixPointSize = 5; //生成图片大小$ p' O" l# P L8 a' A' j7 Z+ O9 l
- //生成二维码图片
1 ]& o) N) T4 G( N) y - $filename = 'qrcode/'.microtime().'.png';
7 k- g+ u4 W, L$ ? - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
- o1 E c; t! \% g% v! G& N* |# ] - $QR = $filename; //已经生成的原始二维码图片文件
7 h, D1 R8 I* F( M/ { - $QR = imagecreatefromstring(file_get_contents($QR));+ _+ ?0 t1 a5 Z. A% H
- //输出图片6 w( u0 j* z! f0 G, S5 l
- imagepng($QR, 'qrcode.png');
! B/ J4 b# a* i% q ^8 ` - imagedestroy($QR);" ?& t$ u/ K" O) F* z
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
. \. f0 A2 ~" E& ~2 S; d- Z1 d* J - }1 s" f8 K0 }% s& p* V) F4 N
- //调用查看结果: C" ?. l& |; w/ s2 w
- echo scerweima('https://www.baidu.com');
: D& c, l# E' u1 ^6 J; F
复制代码 2. 在生成的二维码中加上logo(生成图片文件)6 {$ G" w5 K4 y4 u; w n
- //2. 在生成的二维码中加上logo(生成图片文件)/ B0 z% n u0 S* d7 C
- function scerweima1($url=''){; \" }( \# j( X; A
- require_once 'phpqrcode.php';
* a; d, C* X$ i, `# y& s - $value = $url; //二维码内容
5 ]# I* b& C* ]" I. Z8 J - $errorCorrectionLevel = 'H'; //容错级别, l; U. K" I$ k: N8 v
- $matrixPointSize = 6; //生成图片大小- h/ D: m* V" D1 _2 U# V
- //生成二维码图片& F7 t2 u+ D/ J2 V; ?
- $filename = 'qrcode/'.microtime().'.png';* \' W J5 i1 ]; W8 A5 I/ P$ `7 s& `
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" O) {, ^2 i3 \2 }: z+ s
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
3 O y* t+ r7 m2 D - $QR = $filename; //已经生成的原始二维码图
$ _; X- ?& p2 E& l- k - if (file_exists($logo)) {# ]8 ]1 O" W; e" M8 Y
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
, k! q- q+ L7 P: W4 O - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
% M4 Y1 o8 G( _1 h - $QR_width = imagesx($QR); //二维码图片宽度( v! O3 A6 w/ m
- $QR_height = imagesy($QR); //二维码图片高度, u) G8 C# J3 n$ m
- $logo_width = imagesx($logo); //logo图片宽度+ _" l( T7 h# C0 }) q: A" E
- $logo_height = imagesy($logo); //logo图片高度
" l! D; @% |% p7 b0 w4 ?- u - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
7 {* x( p3 y- ~1 M v$ B - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
. s; k2 x0 @. V - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
9 \" V) Z9 {8 e* } - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点2 _, x- Y1 W/ @# P$ G
- //重新组合图片并调整大小# T* o$ i# e4 v/ L0 [% j! |! J
- /*5 i+ i5 w C9 A8 l' A
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中# U. D8 J5 C; a9 H6 A& r, |) n
- */
5 j3 H; o8 X6 l - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);- Z- M* U; ]+ E; U" n% `4 e
- }
8 C# }4 K8 H2 V6 x0 L, K% N% K, u - //输出图片
5 p6 b" t3 }( H7 q1 g; r+ r - imagepng($QR, 'qrcode.png');
1 y! _' G( ~6 U5 W( W - imagedestroy($QR);
+ Q* A- y2 u7 e$ s3 m5 | - imagedestroy($logo);
0 Z4 c, |1 W0 |0 F - return '<img src="qrcode.png" alt="使用微信扫描支付">';" }4 E- A5 t* y: }3 w) w
- }9 d8 G @+ Z$ n( b8 e1 {9 z4 n9 E' r6 x
- //调用查看结果0 m+ H7 x8 S- a
- echo scerweima1('https://www.baidu.com');. p. q' H- J3 d
复制代码 3. 生成二维码(不生成图片文件)( [9 E8 A: {$ x0 n+ s' w* `
- //3. 生成原始的二维码(不生成图片文件)8 N5 i6 J! y7 c: D1 P6 @* }: {
- function scerweima2($url=''){
5 F, l7 P* S$ i. N8 O6 W, c - require_once 'phpqrcode.php';7 H% v0 q1 ?! m/ h( x
- $value = $url; //二维码内容5 \+ M- W2 `1 P5 Z7 d4 Z
- $errorCorrectionLevel = 'L'; //容错级别
% w7 {. v; k; `+ X4 B* y% v' t - $matrixPointSize = 5; //生成图片大小
' Q! e0 H) O4 c6 Y - //生成二维码图片* H( b1 ~& i9 E8 w N: o
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
8 f$ Z9 ?6 L5 j$ B9 R! k- d - }+ u$ N: h7 ~! J0 h) a( ~ V6 Q. _! g
- //调用查看结果5 q7 y" i7 ~1 |1 x: X0 e
- scerweima2('https://www.baidu.com');
5 x; }! e. P F/ f
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
5 ~. s z' S1 O2 w. _* ?PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
% i1 _! N& I7 b6 B, m3 b在线生成二维码工具(加强版)% V! u* c/ ?7 y5 {0 x2 Q" i
http://tools.jb51.net/transcoding/jb51qrcode/ L" _4 M3 Y8 R. P# x! J' a, T
在线二维码解码识别工具9 W& C: o, Y7 h( G5 x: v
http://tools.jb51.net/transcoding/trans_qrcode
9 X: D, Q- `! q1 H1 }
; c* t4 {. D+ }- u( [7 E8 {/ d! {, K3 u) Z' b1 |8 ~% @# H
3 u- G% M! d9 `; P: Q- r: M
2 p7 o; [! K5 v. A) P
2 ~8 z b* Q$ E4 ^9 M |
|