管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:) F& ^3 D- i% n0 ^7 L- [
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。9 l* A& C. m$ U( u6 s& e
前期准备:; M' ^7 R, J+ j- n- x
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/& N, o' B3 b; `( C7 `$ m9 T. H! J
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 H; [& b8 M( {) _
方法解读:
( s1 k7 i0 y5 p7 U$ i下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
" e' Q. W0 T) G- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
$ z4 w2 S* H$ ]6 y1 X9 w- ] - {0 `2 u9 D T4 W1 v
- $enc = QRencode::factory($level, $size, $margin);
% m* S- N, }+ z6 R - return $enc->encodePNG($text, $outfile, $saveandprint=false);
5 ^4 x: r4 I# I: E7 Y - }3 A' R4 A' r4 n; T; C3 v$ a
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
4 F2 Y* W+ `$ I& o( Y 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;* ]6 K3 N! m# c: g; U
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;2 c% \$ n+ G' _
第4个参数$size:控制生成图片的大小,默认为4;
- Y+ x- S: m, X+ }7 Q8 f, x9 u 第5个参数$margin:控制生成二维码的空白区域大小;
6 v" }2 w# h4 ~% Y; Q 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
6 z6 U' H% | s使用示例:
$ i7 ?) r% J! b, y. z' Q* F+ _1. 生成二维码(生成图片文件)1 E& J5 a( s3 z9 R0 u' ]
- // 1. 生成原始的二维码(生成图片文件)
3 i& Y4 S$ s$ v6 f/ k$ {; U4 ]% ^, V - function scerweima($url=''){
. l; s3 D4 k7 o - require_once 'phpqrcode.php';
' d! {& r6 w6 B% ?5 ~4 B3 C7 ]3 O6 l2 A: d - $value = $url; //二维码内容) w9 ^- z9 |8 @: k
- $errorCorrectionLevel = 'L'; //容错级别7 D# b+ Z" C; l5 E! I, J& \4 P
- $matrixPointSize = 5; //生成图片大小' r: O) u4 [9 w/ G: e
- //生成二维码图片: {0 X- i% N- y5 g# l" G/ [
- $filename = 'qrcode/'.microtime().'.png';
0 L; ?' I" T M" X5 g - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
4 z. j7 @$ I; F( B, T/ I6 V - $QR = $filename; //已经生成的原始二维码图片文件7 g) j; j, W: k1 \9 z" ?
- $QR = imagecreatefromstring(file_get_contents($QR));
+ o6 O& Q0 d4 |4 B; H S- W* H- j - //输出图片5 L! U) D9 n2 X+ H' L! z
- imagepng($QR, 'qrcode.png');/ o+ T3 F; S( _" D( p! Y# ~3 c
- imagedestroy($QR);
2 H% I+ k5 H9 k/ n0 w& ? - return '<img src="qrcode.png" alt="使用微信扫描支付">';
3 @" B0 O& t* w, R9 i! e5 v$ n( G& g) r - }, q! G. X7 o: }: U: g% Q
- //调用查看结果4 X* I) {* R% `* `+ J
- echo scerweima('https://www.baidu.com');- Y& i# q; B/ ~5 y. Z
复制代码 2. 在生成的二维码中加上logo(生成图片文件)$ m. v: j4 f! K* _3 i8 n2 O
- //2. 在生成的二维码中加上logo(生成图片文件)
% i, B. }8 j2 g5 L% x3 P1 q - function scerweima1($url=''){
; A9 m3 ?$ ~) k9 L1 V - require_once 'phpqrcode.php';, {) q; L' s/ d$ y$ j$ D) a+ q
- $value = $url; //二维码内容* L* ^1 ]7 J! v* b# r
- $errorCorrectionLevel = 'H'; //容错级别
( X, y u O# Z$ T* q - $matrixPointSize = 6; //生成图片大小 Z$ w0 z q' y7 f5 ]- J' T6 a
- //生成二维码图片
! Z( @, l; {5 ?7 Z9 ? - $filename = 'qrcode/'.microtime().'.png';
' U0 v* l0 b0 H1 a! c2 C. K - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
/ S8 y$ c9 F* X5 h. X/ J - $logo = 'qrcode/logo.jpg'; //准备好的logo图片) G0 G) f7 l# J7 J( H: U m
- $QR = $filename; //已经生成的原始二维码图* p" F1 @- }1 q0 M* s! s$ }
- if (file_exists($logo)) {" w. V$ F) x, ]' G/ y
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
1 o& @( ^5 G$ q: ~4 S4 K/ e$ F0 w - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
2 G4 h' W. w$ L: ? q( ]6 k - $QR_width = imagesx($QR); //二维码图片宽度
9 C( S% i- D2 c8 B( D7 O8 I+ @0 { - $QR_height = imagesy($QR); //二维码图片高度
$ i0 [+ r! D4 @2 ~3 f8 b7 l - $logo_width = imagesx($logo); //logo图片宽度
- g# ~+ y! \, t - $logo_height = imagesy($logo); //logo图片高度) H7 U/ c1 M$ a3 n3 {1 Y
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
* x) R0 a. P, t9 \+ d* j1 b - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
) C; B7 D: f& r7 c$ c8 o% j - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度' E, F7 P$ ]0 d# |9 `
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
7 S5 ?" |9 L& y4 B - //重新组合图片并调整大小
# g' E: E) T7 D: ^* Y+ N - /* t& S0 t, A) L. y2 f Y
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中: `8 ~$ h; D" W
- */; x2 d; t) | i6 ~/ L: i) r
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
$ D* c9 I2 @) z - }- E! t: ~- c g
- //输出图片7 f7 \( z& q3 P5 z- T: e
- imagepng($QR, 'qrcode.png');
6 B" f- B+ r7 a. X - imagedestroy($QR);
# J3 d# M$ g% F% @- {7 l - imagedestroy($logo);+ A/ o5 a0 D7 S L0 M% X0 z
- return '<img src="qrcode.png" alt="使用微信扫描支付">';3 u9 c9 x( A m5 J, _8 |/ E" w( N; L
- }
E) r' j. r% j$ ~. H - //调用查看结果9 ^$ b+ f( Q0 F5 Y# K6 x
- echo scerweima1('https://www.baidu.com');
6 n+ ?! Z: C# E: K3 W( S
复制代码 3. 生成二维码(不生成图片文件)9 ^0 h( r6 n3 P. _
- //3. 生成原始的二维码(不生成图片文件)
- I1 m$ I& ^$ y) j' K+ [ - function scerweima2($url=''){
4 i7 E/ [9 w+ ~9 l6 H: H! o" u7 V - require_once 'phpqrcode.php';& I* Y" q7 e8 R
- $value = $url; //二维码内容
/ f% [4 G( `- w+ H V) e& o: N! `0 M+ n. L - $errorCorrectionLevel = 'L'; //容错级别1 w# |0 a; ?4 G9 B. _3 t
- $matrixPointSize = 5; //生成图片大小
4 ]' z, y3 a s4 p! g* }7 O - //生成二维码图片
5 z* e3 ^& p4 `% J - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
# k! S$ }3 @4 V. C4 q - }
j4 m: j; B3 r2 ^& I - //调用查看结果
+ X0 B- w9 _3 U( K - scerweima2('https://www.baidu.com');
6 `% m) m- F7 F4 h- d1 R- o
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
$ I3 L: \' ]$ R, ]9 _PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
! y8 M, ]" o0 `2 L在线生成二维码工具(加强版)9 a) b# C: y0 Y D6 e* G& T' V
http://tools.jb51.net/transcoding/jb51qrcode
2 j( o" N8 d- g* p: n U在线二维码解码识别工具/ n( R8 H6 L) z( ~- _& k; V9 G
http://tools.jb51.net/transcoding/trans_qrcode
. Y; x3 c7 j1 j& l% H: q! D( H, |$ T: ^- f$ a0 U
' r& T' E e9 T
1 y v( r. _" ?9 _
6 ]3 q" G" H) x: _- @% x8 G5 p. `& l: D3 C* n+ }/ Q
|
|