本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:8 I2 \/ a8 A8 X. r# r" X/ W/ f$ [
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。0 z5 z* v" l. `3 u/ x
前期准备:! M3 B z% F$ a" m3 l
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
( O* ?) P! J2 L1 d5 E6 I 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
" y2 O6 G0 f6 k6 s方法解读:
a' D8 u. [1 |. a/ E下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ {# J) q& J/ W0 `6 {6 c! V
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)4 i# t( D' y) M6 c( ~
- {
; c8 b8 N h) W) p - $enc = QRencode::factory($level, $size, $margin);
8 M3 t0 H4 v7 O5 ? - return $enc->encodePNG($text, $outfile, $saveandprint=false);
: \- R$ x# f) w4 A - }
; Y( p. e2 B' r
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
* Q: u4 r5 @0 c# ]0 A8 J0 o: [4 x 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径; {7 ?( g& T) Y
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;# E9 p' P5 o6 R5 E; y
第4个参数$size:控制生成图片的大小,默认为4;: C2 }3 h, [7 U/ q
第5个参数$margin:控制生成二维码的空白区域大小;
1 i& ]- W& s4 p 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
1 u) r" \9 ^- W# ]! n使用示例:% f1 Y, ^9 O& a) J6 V+ C
1. 生成二维码(生成图片文件)' f0 X2 \ \8 v3 x% U, O7 r% [
- // 1. 生成原始的二维码(生成图片文件)
% |; p" I) S; ` R& e/ {) V0 { - function scerweima($url=''){
; `, y8 D5 H0 I F. ] - require_once 'phpqrcode.php';5 m/ `, g9 v* B! l
- $value = $url; //二维码内容
9 Y4 H g* Q9 ^2 J. C - $errorCorrectionLevel = 'L'; //容错级别1 v% [$ f2 }* K2 d
- $matrixPointSize = 5; //生成图片大小
3 ]8 @/ q+ S" m - //生成二维码图片
' r( B. {5 c( p* t7 i - $filename = 'qrcode/'.microtime().'.png';
9 [, H. d7 w$ ]/ L - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
* {+ A# R- u3 P6 T% v3 I - $QR = $filename; //已经生成的原始二维码图片文件
8 X: J4 l* d" k+ s# p2 O - $QR = imagecreatefromstring(file_get_contents($QR));' y P$ A1 `+ g1 ?
- //输出图片" T7 F1 `" D& I
- imagepng($QR, 'qrcode.png');
! |( W: p- L8 ?8 C - imagedestroy($QR);/ A2 |& C) o% U$ [1 F6 l1 w1 v1 Q, p- z
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
! U; W7 n3 s$ u - }3 M p3 k( y3 [% p& M
- //调用查看结果
' y/ U0 L. D, N+ L - echo scerweima('https://www.baidu.com');& I2 J0 v! A2 t6 \/ v; r
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
. o; Z$ d& @/ j I! t* @& ^- //2. 在生成的二维码中加上logo(生成图片文件)% I" s. ~+ @2 @6 W( n
- function scerweima1($url=''){# V$ d, c5 j9 C5 K6 F) r( y
- require_once 'phpqrcode.php';4 w$ V$ A, j7 G
- $value = $url; //二维码内容. Z% U: r+ p& x6 C: `1 f2 M
- $errorCorrectionLevel = 'H'; //容错级别 e8 ~- F8 g" n8 d) a5 h
- $matrixPointSize = 6; //生成图片大小
- }3 B8 P: H5 E9 ]: G T - //生成二维码图片/ `. W* n2 e5 m* U: e
- $filename = 'qrcode/'.microtime().'.png';8 m1 l$ {1 E, f* F6 I1 P6 M4 k
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);, M% v$ M! v3 K9 `. }7 \* a% ~. M
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
# h4 R. E- _- v. Z& Y t - $QR = $filename; //已经生成的原始二维码图
7 Z* [8 v8 O4 y& C$ s: k - if (file_exists($logo)) {
9 {& {0 V f* {5 w - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。; P) r* q0 B4 b6 n% O4 P& n7 t7 {6 Z
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
: T4 l) f: R# f d/ N+ w - $QR_width = imagesx($QR); //二维码图片宽度
; P" M5 h1 h5 P- f - $QR_height = imagesy($QR); //二维码图片高度
$ l: o. H# A& }" p/ s. _ - $logo_width = imagesx($logo); //logo图片宽度
1 V. U; v) q$ w) W8 W% N, i1 W - $logo_height = imagesy($logo); //logo图片高度
- ]2 ]0 `7 g3 T0 [: ]* x - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)- I6 ]7 @9 J" m0 @
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度), B* P' m) j* Y- S7 m" x
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
+ Z. q! J' B2 U7 w. C - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
- J& m0 k% X5 N. s9 D - //重新组合图片并调整大小, t# a1 w& }$ B' |, A
- /*
/ T7 [' f9 V- ]% J) D3 [ - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中. {2 }) @! Q. Z4 ?% k4 n- Z9 F8 V
- */# O/ P" T9 O5 P( c% e& t) h6 ?* j6 h1 g
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
; |3 Z8 M. ?( N% p - }
3 g I5 i7 E% e% D* R, {( @ - //输出图片
* |% d* v6 G/ K' m+ f4 s - imagepng($QR, 'qrcode.png');
& E2 \, j" z1 |( a$ P - imagedestroy($QR);
- G6 f; } e6 H/ D5 N - imagedestroy($logo);
9 k2 x6 q3 u& ]9 I - return '<img src="qrcode.png" alt="使用微信扫描支付">'; A: C3 f/ B* u* c" U9 N
- }. V6 r/ k2 j) z6 \5 a( `
- //调用查看结果1 L1 Y$ \) Z+ F. {$ S# ?4 K+ F
- echo scerweima1('https://www.baidu.com');1 m4 Q& Q! g/ D$ [+ o4 ?: V
复制代码 3. 生成二维码(不生成图片文件), x7 u! x7 o8 P: ]) @, e
- //3. 生成原始的二维码(不生成图片文件)
# S7 G6 u9 q' z& I3 e( s" D - function scerweima2($url=''){( W, q* h9 d! F* v5 k9 N8 y' F
- require_once 'phpqrcode.php';
; X0 H; l' [: r6 N% q+ K0 y' \ - $value = $url; //二维码内容6 k, b3 @ j6 f! P$ r. \
- $errorCorrectionLevel = 'L'; //容错级别0 O3 h B# A2 Y) I- D8 @; R8 A9 X
- $matrixPointSize = 5; //生成图片大小
7 s `6 }! P9 D2 |+ A% u - //生成二维码图片
( |' C% l3 [* p2 O& V2 s - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);/ R1 ]5 P @/ W4 B2 @
- }
0 q4 k$ E F" }. L( e, W+ u - //调用查看结果0 N: x* J$ @4 S _
- scerweima2('https://www.baidu.com');/ t* j8 y3 F' I2 D
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。% N# `0 `6 H0 s8 D( K
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:* G. W. C9 V# P1 ` E
在线生成二维码工具(加强版)/ Z7 j* r# P4 n" a
http://tools.jb51.net/transcoding/jb51qrcode
0 r, x/ T1 M( u' u; I在线二维码解码识别工具
$ {4 [; T0 Z' Jhttp://tools.jb51.net/transcoding/trans_qrcode
- L- \' ^7 ?: i( [! Y/ u, X
J/ T* A& d8 W4 N* H) G8 T; _& e
: n. B9 W2 Q$ a- a3 K
1 r: F6 j$ I( T9 @8 Y0 X2 C2 @9 a
& s% n- k) l% N a9 m6 p |
|