管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
# h8 ?$ g8 p* O. j/ O. M* { x使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# e' @1 m e/ v# ~
前期准备:
3 ]' i' Q& d% N- U5 T* \$ v1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. ] w# J: @. V5 o' o4 W6 j 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
6 y" N- ]' k# ]方法解读:
* R% g. q; _, E9 u下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):0 s' G3 R" W4 K; K; |& I
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)6 H, ^3 H% |0 E9 d5 o# o9 I# A6 T
- {
$ m; f( ~+ d8 E# c1 U/ W- Y6 L! h - $enc = QRencode::factory($level, $size, $margin);
3 K5 b+ Q2 z+ f; _) q& t+ i - return $enc->encodePNG($text, $outfile, $saveandprint=false);7 S4 c. L2 S( ^/ T3 A
- }/ u- d/ r4 w! M! T
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
. [2 i, i/ y5 S( X$ x& {7 y9 d8 [ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
$ V% p1 u u5 C9 O. e 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
" E+ M0 N% q7 N1 j7 [ 第4个参数$size:控制生成图片的大小,默认为4;
1 `. w* P! Y5 y3 o; l6 A2 p# | 第5个参数$margin:控制生成二维码的空白区域大小;1 T" ^3 Z1 s6 ]8 D) s4 c
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;, y- q* s4 d- } n; E* L
使用示例:
9 a: ~, |/ r- \2 {1. 生成二维码(生成图片文件)' O* q- @4 z, O I# o2 A
- // 1. 生成原始的二维码(生成图片文件)
4 S* z' l" g1 A2 }0 v8 n - function scerweima($url=''){5 [3 O2 V( x) l6 M& |( T0 i* _' V
- require_once 'phpqrcode.php';
$ ~9 I* Z/ }7 L - $value = $url; //二维码内容. C, A* W* J0 X1 X% O
- $errorCorrectionLevel = 'L'; //容错级别
% P: P' c. X. S( c0 i# x& H - $matrixPointSize = 5; //生成图片大小
; r9 ?1 e; a: r; n - //生成二维码图片& @# g6 ~" W! i+ W
- $filename = 'qrcode/'.microtime().'.png';5 q7 v! t* G% K
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
4 j+ d; K) V5 ~ - $QR = $filename; //已经生成的原始二维码图片文件4 X y1 T" H- k* Z$ X, B: u/ z
- $QR = imagecreatefromstring(file_get_contents($QR));
& b$ Q6 K* v [; f6 { - //输出图片( Z; P& E; o- v
- imagepng($QR, 'qrcode.png');
0 ]. J5 D" k& z1 Z - imagedestroy($QR);
s+ P" `9 v9 F% V% ^0 l - return '<img src="qrcode.png" alt="使用微信扫描支付">';: z+ ^, E* F% v% ~* I, M: n$ n; O
- }3 U- P# u1 p5 ]
- //调用查看结果
. {. N5 y( z3 o; A - echo scerweima('https://www.baidu.com');
+ F9 G: P! _9 h! c; d% i9 u
复制代码 2. 在生成的二维码中加上logo(生成图片文件); t7 t; t2 j& j* X. S' G
- //2. 在生成的二维码中加上logo(生成图片文件)6 s! D) R/ ~) e3 \
- function scerweima1($url=''){
1 i0 t# ?7 O7 b _% \" [8 O; b% B - require_once 'phpqrcode.php';. V1 e" T* s$ M
- $value = $url; //二维码内容) m0 {' F; O- w+ [
- $errorCorrectionLevel = 'H'; //容错级别% Y/ x% ]5 ?' C; ^0 e
- $matrixPointSize = 6; //生成图片大小. s' `2 O! y+ t. \6 Z9 t9 y
- //生成二维码图片
0 _- h. _$ K. q4 F4 e$ L - $filename = 'qrcode/'.microtime().'.png';6 E9 y- L: k' O* G' V
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
. Z0 D1 z: C) X% { - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
/ Q7 Y, l! B- V. k5 l4 @ - $QR = $filename; //已经生成的原始二维码图1 l; S" i3 S+ t6 z% V- p
- if (file_exists($logo)) {- Z( }; H$ _+ A4 l7 |0 }
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。, u/ n; f$ N3 G* x- k/ G$ R
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
9 S7 k3 k/ L0 v* b. B - $QR_width = imagesx($QR); //二维码图片宽度* z$ T7 v* x- w" T' k& U, ~; @
- $QR_height = imagesy($QR); //二维码图片高度& N# k- ~5 ?4 G8 p0 i, e
- $logo_width = imagesx($logo); //logo图片宽度1 C. t2 l( F' T S( _+ }
- $logo_height = imagesy($logo); //logo图片高度$ ?0 s l ~! y, O7 \$ u/ p
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)3 M) p4 L8 P4 H3 X) H! l
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)" f; F) J$ o/ a, `. r V
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
4 r, F/ ]) W& \- [+ z - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点( T2 \6 N/ }! g5 H2 [1 i, f! F& }
- //重新组合图片并调整大小
- S6 Z! g- Y( e4 b/ E, m( e - /*
+ i h! |5 Y# E1 O& O: y - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中' e# E: S1 \4 b/ t3 m9 q. j
- */
8 X v4 a, e: E - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
- U8 ]& F8 }5 q$ a+ c2 p - }! D& W6 H; e8 b4 u
- //输出图片
; u) g1 S& G' l1 W1 n - imagepng($QR, 'qrcode.png');
' y* x& E6 x' d9 I. c - imagedestroy($QR);2 T6 V$ g; Z5 ~+ q4 e
- imagedestroy($logo);
. w, r) i" d/ C/ [' o - return '<img src="qrcode.png" alt="使用微信扫描支付">';1 D' P( Y3 I6 X1 @, h0 G. ^
- }6 k( V" L% z e3 ]* [; W
- //调用查看结果
6 }6 ]9 N/ \$ u. t - echo scerweima1('https://www.baidu.com');
# s0 J9 [; o I( {, j+ q6 z3 K" ~
复制代码 3. 生成二维码(不生成图片文件)) |- Z% K A; n5 C: e
- //3. 生成原始的二维码(不生成图片文件)
4 ~" C; F3 k9 n$ j# a - function scerweima2($url=''){. t4 }2 P9 t/ v: c' \" W0 K
- require_once 'phpqrcode.php';, A, t+ n( G. h# N+ x/ q: N
- $value = $url; //二维码内容
: @& U% ^. Y" ^) \ - $errorCorrectionLevel = 'L'; //容错级别
9 a" \: ?0 P U1 I+ D2 \ - $matrixPointSize = 5; //生成图片大小
& R& V& A" ?* c, S5 ^ - //生成二维码图片
) Z! o1 T4 h: J- @6 Z" O - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
" l1 B9 t/ J5 u - }; ]/ K* ~. ]" U: ]$ a4 _( y/ Z: d" [+ |
- //调用查看结果
; u9 G5 T! c! o- S. T6 P1 S+ u) S - scerweima2('https://www.baidu.com');0 F! a2 \, a) G# m, K
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( X/ Y& y, Y) `+ T$ F/ U
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 U' t' }# p* F* h& y
在线生成二维码工具(加强版)
l# h. V4 `5 K/ \# b: {http://tools.jb51.net/transcoding/jb51qrcode
0 c- m4 k- @: T! {7 E在线二维码解码识别工具
) d/ k9 y+ d2 \http://tools.jb51.net/transcoding/trans_qrcode
2 Z0 a4 [) f8 k+ w4 }
1 v' }6 }) z3 y8 p/ h4 f: s
! h' L9 K, i! J8 p6 u& E( X# h+ o- [4 m; ]
4 t$ l" y4 v8 T& [
$ S. W- v& }9 f |
|