本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
5 k9 F2 M4 M, v, V" [4 E$ H8 Y9 [使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
! @/ l1 X1 d) Y前期准备:
2 s& F+ {/ n W; o8 k% G1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. B# F' T8 n W5 q, Z H 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)- O# G$ I t" A+ T! P2 \
方法解读:
) M. I+ X' E& F下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):. O% n4 z7 c, |, W H+ s
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)! p8 _) Y1 V& |4 ^" k* i( ]
- {* N% C$ h0 S- J% B
- $enc = QRencode::factory($level, $size, $margin);
- S/ \% I& k- {" u! h2 a' K( } - return $enc->encodePNG($text, $outfile, $saveandprint=false);
3 M, G* @9 M. Q3 D3 t$ p- | - }. k- Q8 i) b) |; R
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
: F9 z9 T6 Q" C8 B7 x) P6 b 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;6 h! i% [' m& Z$ I0 N0 m# ~& d
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;( S( x; r* x5 l2 J! l( J
第4个参数$size:控制生成图片的大小,默认为4;
) ?) `' d. o6 S) \! ~, H 第5个参数$margin:控制生成二维码的空白区域大小;. B* P9 o, s: X+ A3 }& R
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;9 u! M. r& B' B5 h( d4 F
使用示例:; O. m8 L/ u7 M( {5 \( b# h
1. 生成二维码(生成图片文件)1 M' j2 T0 v: r
- // 1. 生成原始的二维码(生成图片文件)* T. t9 r, B( ^) b* D
- function scerweima($url=''){4 L- q+ G( r0 z+ r, V! O- r
- require_once 'phpqrcode.php';' [8 ]& S1 y7 k7 A. h
- $value = $url; //二维码内容
1 D4 T) B! ^9 Q& Z - $errorCorrectionLevel = 'L'; //容错级别
+ `7 q. g* E2 x0 N! {/ w" z - $matrixPointSize = 5; //生成图片大小- B/ ?" J8 V& ~) U
- //生成二维码图片
o2 L. H. H' D& ~# N0 a# U) ` - $filename = 'qrcode/'.microtime().'.png';
+ D; g, s) u3 H6 y - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
$ R& @% j! q f; l/ n/ ~% E - $QR = $filename; //已经生成的原始二维码图片文件
2 o, ~6 Q3 E, S* b - $QR = imagecreatefromstring(file_get_contents($QR));" c! ~% l# t. \& \+ s
- //输出图片
/ O# g" h! f7 V8 h; c- j$ i, J - imagepng($QR, 'qrcode.png');
! A. P( V7 _ L, H3 V2 ?, d7 @ - imagedestroy($QR);
1 s4 F: v- ~; g - return '<img src="qrcode.png" alt="使用微信扫描支付">';
! I' J9 @. j0 }! K4 h2 Y - }
1 V" ^% k* v/ }6 j9 p - //调用查看结果- }8 F0 }8 D; v. J; s7 ~
- echo scerweima('https://www.baidu.com');
( Q" u$ J+ M0 \. ^- H1 E
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
- l* }# ?) |3 q) t4 a7 X! r- //2. 在生成的二维码中加上logo(生成图片文件)# n S2 C" u6 ]- D+ T
- function scerweima1($url=''){/ R$ y9 q I# f0 |. M1 W
- require_once 'phpqrcode.php';
2 t0 R+ z' R8 l, a0 ~1 w: k - $value = $url; //二维码内容
7 G. B: O9 C+ j* b7 B, G. Y - $errorCorrectionLevel = 'H'; //容错级别5 i2 D4 z( l% Z: P, `" K$ S
- $matrixPointSize = 6; //生成图片大小
. q, R: m7 _ f9 }/ A% i* }& r4 o; W - //生成二维码图片. Z C1 d5 U* e6 ~& Z6 F" Q9 W6 U8 Q
- $filename = 'qrcode/'.microtime().'.png';' Z( E. s! X( Z. _& y1 K. {! B
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);4 |8 N7 p; Q6 S: Q/ ~
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
! Z# }5 k% k& s: T* a$ } - $QR = $filename; //已经生成的原始二维码图+ Q5 V6 E Z6 Y* S" l
- if (file_exists($logo)) {
( U7 ?- u1 R3 V/ b, g z - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
# d* S0 Q7 a- I; e: N% P) N - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
: |" Y+ j" X* h - $QR_width = imagesx($QR); //二维码图片宽度# z1 x2 X8 i% d/ }0 O0 T! S. R
- $QR_height = imagesy($QR); //二维码图片高度
: N: w" e* s& }' [% S2 g/ l0 Y, E - $logo_width = imagesx($logo); //logo图片宽度
) j/ p( ?5 W' F0 ?/ H - $logo_height = imagesy($logo); //logo图片高度
. `, D/ z* y. i8 B( R - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
- O# ~5 k( @5 t/ }+ } - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)( } B9 W( z% f( _: i5 q5 W' `1 `, n& h* t
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度5 _4 `! a2 @$ ]2 _. h s
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
C' t7 A; I& p3 l - //重新组合图片并调整大小/ s; J7 u9 P ?: n
- /*
0 O+ E( n; {. V* ^: { - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
7 v" M0 p- X ?$ S; x4 F - */
6 @" ^8 G( U q, U: D; Z - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height); |8 o, A3 X7 Y0 I
- }
: x$ V( F# h& A Z/ y# b' {7 S+ y: _ - //输出图片" W `+ b9 D5 q
- imagepng($QR, 'qrcode.png');
6 `2 K9 ~1 \4 J; C% q+ k - imagedestroy($QR);
. C; s( J! d+ w/ `! C$ p# u2 Y- | - imagedestroy($logo);
. L5 ~0 [# j& c" Q7 `# c# K. `7 b - return '<img src="qrcode.png" alt="使用微信扫描支付">';8 e, t3 z, W: q3 L# ]
- }
8 j$ U, A# N7 `# u, i - //调用查看结果0 ^6 Y7 r+ T: @, p7 v; v
- echo scerweima1('https://www.baidu.com');
2 D0 ^$ G& ?+ ~& G1 d; d5 S
复制代码 3. 生成二维码(不生成图片文件); W9 S1 _) S% O0 \& y- s1 z
- //3. 生成原始的二维码(不生成图片文件)5 ^! c- t0 {9 A1 b g4 o/ t
- function scerweima2($url=''){
. W7 A, A! J& [" l2 K) T% f# L - require_once 'phpqrcode.php';
3 y% m' \% {9 ~& i( o - $value = $url; //二维码内容
+ Z! L2 e$ `1 W - $errorCorrectionLevel = 'L'; //容错级别; l; O3 ], k4 S
- $matrixPointSize = 5; //生成图片大小
9 b; ~ c0 E0 [ K5 c - //生成二维码图片
q1 ~3 z3 t* y a - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);3 ^5 a* R4 H: b9 S v z, O( h$ e
- }
+ C0 g5 `2 V5 [: M; K) \2 \ - //调用查看结果
" A8 c' i! s5 I- |6 B5 a - scerweima2('https://www.baidu.com');' \5 W; Q$ p8 t0 e* v
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。; j1 v2 W& C0 T9 j& Q
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:9 H+ a" ]1 Y* Q. ~ \% W
在线生成二维码工具(加强版)! r# z( W6 m# p% r) X% C) a
http://tools.jb51.net/transcoding/jb51qrcode7 j' T/ x0 c3 G( r5 Q; W4 x# ~
在线二维码解码识别工具
% _+ V. v4 B, L$ nhttp://tools.jb51.net/transcoding/trans_qrcode5 a8 a" q. o2 K I
5 P& g: _% }) B) V+ l8 F; m- s% c
, ^. b* z# Z- V% c/ r# C- g- f" t' V# t+ e. p) e
% ^* m, _1 l5 h9 P7 b. h3 f |
|