管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:4 o1 N- j1 [* f) o) H
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# |3 {, t, W5 O6 J' Y1 O
前期准备:/ ^" ?' T0 E6 s6 {
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
% g. U$ R9 b# i# H o ? 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)3 H: y. P& R% F' x
方法解读: \1 ~2 y7 X. V) t% x
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
( c, k! @0 Y: ^# y1 @* _0 a- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
1 K/ [% @9 y4 ~& h4 b - {
. }9 D1 F& V; ] - $enc = QRencode::factory($level, $size, $margin);
" G# d- `2 e( ?0 y" Z: D( c - return $enc->encodePNG($text, $outfile, $saveandprint=false);
, f" K4 R: }' W* e - }2 a) @) l' \8 [% v8 L- ~0 P
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
5 A( {# w( b+ { 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;8 x' g1 D8 F$ b+ {0 H
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" I& e" O' Q: H% ?. m8 u! M
第4个参数$size:控制生成图片的大小,默认为4;9 V4 E$ J: h8 l) O! l, w
第5个参数$margin:控制生成二维码的空白区域大小;6 ?2 C' l2 D- a* W' \
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ k1 U2 ^3 s- U4 C) B$ y使用示例:
5 r/ D7 w( r; V& `$ P1. 生成二维码(生成图片文件). R; c. `4 B. ?, O3 Z& ]. k
- // 1. 生成原始的二维码(生成图片文件)
& G2 C2 f' S' m - function scerweima($url=''){7 m+ u/ v. y2 b/ ]
- require_once 'phpqrcode.php'; F6 _- J* _' x) s
- $value = $url; //二维码内容
; A' B D( ?) @1 A6 E$ b! v - $errorCorrectionLevel = 'L'; //容错级别: Z. G6 P0 l- T K- P. n! k- A
- $matrixPointSize = 5; //生成图片大小: }. v- X% r3 Y/ K
- //生成二维码图片* B; O. x! M% K7 e
- $filename = 'qrcode/'.microtime().'.png';, J* g5 m9 A9 E1 U/ K
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);$ s1 b+ V* ], O+ O$ U( h- X
- $QR = $filename; //已经生成的原始二维码图片文件" u. O4 o4 Q9 h% |3 i' i3 M
- $QR = imagecreatefromstring(file_get_contents($QR));7 z7 M/ a% n' A( j( Z. _
- //输出图片
6 y; M" m0 ^0 U6 z7 [( y - imagepng($QR, 'qrcode.png');+ j0 _6 z6 S) L6 I4 r' H
- imagedestroy($QR);
4 p, G# Z7 S. c! U$ d: g) N - return '<img src="qrcode.png" alt="使用微信扫描支付">';" `6 X" }4 [; a
- }. U8 V+ Z1 r# W# f
- //调用查看结果
4 R( \4 ?# \1 U6 g# e: m; C - echo scerweima('https://www.baidu.com');! s! }8 Y: b/ W+ @, i
复制代码 2. 在生成的二维码中加上logo(生成图片文件); L5 A: c( h# g! G) M% c7 D' }; _8 z; l3 j
- //2. 在生成的二维码中加上logo(生成图片文件)
/ U9 ?' K4 W4 ?5 x3 y0 { - function scerweima1($url=''){+ K4 @5 v' ~# ]% L# P
- require_once 'phpqrcode.php';/ j5 r1 J+ E3 X: `% c6 B
- $value = $url; //二维码内容 T2 K7 R- \- p3 Y+ ~: M2 d
- $errorCorrectionLevel = 'H'; //容错级别, k c& Y; ~% ^+ A! C' m1 A6 I
- $matrixPointSize = 6; //生成图片大小
) ~) {; {- a# s4 \ - //生成二维码图片& W. g3 r" h+ `8 }# x% z
- $filename = 'qrcode/'.microtime().'.png';5 m6 ?9 W& h2 M3 p- Y, x
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
/ O8 }! m" l1 Q* H' ^ - $logo = 'qrcode/logo.jpg'; //准备好的logo图片2 k$ R7 s* m+ [7 h2 P# w
- $QR = $filename; //已经生成的原始二维码图0 V3 O x( V8 G* O9 Y; D. `* N6 d
- if (file_exists($logo)) {
; r# E: d& P+ V8 x n$ r | - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。9 [( ?8 a2 u3 s, t
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
& S; v% i8 X3 G4 S6 V( j( b- C8 E - $QR_width = imagesx($QR); //二维码图片宽度
( e/ k1 W( U2 y+ F& \, h - $QR_height = imagesy($QR); //二维码图片高度
( B4 X7 d$ m2 M6 T8 S - $logo_width = imagesx($logo); //logo图片宽度- Q$ V$ w0 m, j
- $logo_height = imagesy($logo); //logo图片高度
+ R% Y7 }! I0 ~4 `# \$ { - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)# k5 {; r# s f) P
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
& F' D% I4 L6 m7 \; h' h - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度* `# m, b- M2 O3 L4 ^. M
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点6 C; ~( ^: g- d) p# b% s
- //重新组合图片并调整大小" P' U, T: S" k
- /*
C; A) H6 }3 L& @& g H# W$ ` - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
" V6 }( { i+ r+ a - *// e1 M' f: Q. c& b5 O) l1 s2 Y
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
5 v$ @; E! l0 I# ~" S - }
1 R7 a/ E3 |/ _0 n' }8 Q) R - //输出图片
1 H. Z6 \: t( ^% q# R" [; q+ u- T - imagepng($QR, 'qrcode.png');, I1 [9 k" @* W* b2 z9 N+ f
- imagedestroy($QR);, J* H% R/ V* w) E% E+ Q O0 u$ e. d
- imagedestroy($logo);
8 H" c: n/ t E# x& V& H2 | - return '<img src="qrcode.png" alt="使用微信扫描支付">';# _3 z* `% B" N R- W0 E T8 I9 L
- }
* U6 T6 b* `* `! j - //调用查看结果
7 y" |# k7 c# N$ q% ]: X - echo scerweima1('https://www.baidu.com');) D" h0 M# o6 t2 Z5 G
复制代码 3. 生成二维码(不生成图片文件)9 a0 f) H' t1 v( i% h9 x2 }
- //3. 生成原始的二维码(不生成图片文件)
; p- \# i1 { V6 i( A - function scerweima2($url=''){
: g' z4 N6 k5 ? s( \- C$ ]1 s( n9 D; G; ~ - require_once 'phpqrcode.php';
2 R G# U# n. N# V* Y - $value = $url; //二维码内容
0 `# ]/ T5 ?- S. z3 [2 ~! d - $errorCorrectionLevel = 'L'; //容错级别
8 F2 r- m. L5 k/ ]# e( g+ {% L - $matrixPointSize = 5; //生成图片大小/ w N7 N6 [3 K6 [; K- u. O
- //生成二维码图片
1 W4 |! d. ?0 W$ A' j - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);2 l0 g. T5 h: Z) u. U2 d
- }3 B5 f. \: C% f# j4 R- }* U
- //调用查看结果8 D+ z$ l, Y4 w3 I* J# H
- scerweima2('https://www.baidu.com');
- P \" N5 C# X, t1 v$ A6 w
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。8 R- V* R7 h2 I2 a/ \3 ]
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 u' g9 w0 Z2 i, L" s
在线生成二维码工具(加强版)
+ Y- y2 F# P# {http://tools.jb51.net/transcoding/jb51qrcode
5 z+ a5 L8 G4 ]2 K在线二维码解码识别工具1 M0 l) C3 q8 k7 t" B
http://tools.jb51.net/transcoding/trans_qrcode5 r! v( G7 s M1 b" K
0 P8 z4 F* U5 Q6 i0 R) H% m- d, ^) _. }5 Z
3 s) c5 p% Q( {1 m' P
! I; c3 b4 Y1 [: X7 G" B/ W! }& C( Y- i$ F4 Y
|
|