管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:2 o0 `3 H( O, i8 z
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。9 L6 h6 f0 ], ~6 l
前期准备:4 u5 \: H2 S$ C0 k
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
- [/ \1 n" G% y" [; K- N 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
6 H( `; o' H. g) O- V9 r) F方法解读:" g. l5 j. }+ _. f6 g( ~; u: d
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
' X4 _6 a; B* F9 u- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
% \$ x( ~& a6 l; |0 ] - {
' O8 A1 j* G: N& F - $enc = QRencode::factory($level, $size, $margin);
5 k# i' j8 x5 F' z, k2 V( V - return $enc->encodePNG($text, $outfile, $saveandprint=false);
6 i& ^/ [( Q8 [8 z0 { - }$ t2 u8 g& ^6 W2 L0 T2 o; e
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;& l# L/ H2 m4 F5 c7 z7 _
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
/ Q, l, W8 `1 v0 Y8 K2 t. | 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;! H- n1 Y+ N( Q$ J$ B, S" I
第4个参数$size:控制生成图片的大小,默认为4;
1 m( ^, F, l8 L0 q* H: P 第5个参数$margin:控制生成二维码的空白区域大小;# O& X' K9 ?1 f! g4 L
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;7 b- G o3 T- F, A: x. g D( l
使用示例:/ W( T7 ]0 z& x
1. 生成二维码(生成图片文件); i8 y8 B! s: X
- // 1. 生成原始的二维码(生成图片文件)+ S- q5 P7 S+ y9 S2 f; u. [5 @3 d8 x
- function scerweima($url=''){3 @1 ]. w4 o: ^) L# K" ?
- require_once 'phpqrcode.php';# S' D% ], a( q% @
- $value = $url; //二维码内容
/ w! q; W" I) f4 }4 ]* x - $errorCorrectionLevel = 'L'; //容错级别
% k; ^' ^. E6 u: e( {" Q - $matrixPointSize = 5; //生成图片大小
. | u7 e6 s R$ C, z - //生成二维码图片
! ?6 E/ N8 L$ W( i! b- U ^! a - $filename = 'qrcode/'.microtime().'.png';. P3 D: b4 d$ v% q: [8 h8 c
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 Y) K5 ~& ?# K$ E+ C( c# v) t - $QR = $filename; //已经生成的原始二维码图片文件3 G# a; m. p+ x
- $QR = imagecreatefromstring(file_get_contents($QR));! U! J3 Y( b) X) d& b! S) c2 H
- //输出图片
/ H6 S/ s, ^6 L& k2 [ - imagepng($QR, 'qrcode.png');
* P$ \% }5 t" p: } - imagedestroy($QR);% B" x4 ^! H$ ?, y
- return '<img src="qrcode.png" alt="使用微信扫描支付">';/ F$ Q0 g J. Z1 E- I( M' t
- }
, z4 v6 W- R+ @$ s9 ] z - //调用查看结果
4 m3 V( y( e1 ] - echo scerweima('https://www.baidu.com');
* \# D# P8 S9 r% T/ G% A' f+ K7 @
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
0 ]" X% z( L0 w+ N- //2. 在生成的二维码中加上logo(生成图片文件)$ ?1 j) U1 q# O- l4 B! K. O. x; ?
- function scerweima1($url=''){: c4 W/ H7 [' e$ t8 A
- require_once 'phpqrcode.php';
} v7 I. p/ q - $value = $url; //二维码内容
4 C9 m# x8 n- a' n# y, u& J - $errorCorrectionLevel = 'H'; //容错级别
: R7 Z. d y, q$ t& i - $matrixPointSize = 6; //生成图片大小
& a9 Y% _& n8 ^! F - //生成二维码图片/ F2 X, S+ m2 G+ \
- $filename = 'qrcode/'.microtime().'.png';
* d( j; |4 C" j - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
' t' C G! g% Y' B8 ^ - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
& K! ^! `- k5 q9 G2 O - $QR = $filename; //已经生成的原始二维码图9 Q" I1 h) n' P9 J4 F3 a/ u6 r
- if (file_exists($logo)) {8 o8 W3 X* A+ a8 {/ {! a' y
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。/ I8 k$ H2 |6 \; |5 F; N
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。- J" d, K1 t5 k' P: C8 u
- $QR_width = imagesx($QR); //二维码图片宽度
: h- o y2 U& ] - $QR_height = imagesy($QR); //二维码图片高度, I t9 z2 }- ~( b
- $logo_width = imagesx($logo); //logo图片宽度' _$ f2 F+ c' W/ K1 R
- $logo_height = imagesy($logo); //logo图片高度
! p& I+ ]* p- O- l5 |5 G - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)2 S. U- q: V& I/ t; G' X
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
3 s: b2 ~) d" P - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
6 H K" m5 |3 T. h - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
8 { H$ ^. E/ O$ Y- B" O# n - //重新组合图片并调整大小( k$ Y% f o) A. c3 W: x
- /*/ i. g* S5 M) x1 p9 x9 t' F8 w5 u K
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
$ I7 ^/ a" i5 x - */
, h0 Y. N7 b' _6 v+ A+ N - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);) n. W. S% H) ~, m
- }
8 i; h _( L- l - //输出图片
$ N. k% a$ V* T - imagepng($QR, 'qrcode.png');
9 p* d" L. s& S" m; R, ]5 r# `; r - imagedestroy($QR);1 G1 V- a; E$ u
- imagedestroy($logo);
9 E6 k/ A" ~5 J- U8 H3 v3 W; Q - return '<img src="qrcode.png" alt="使用微信扫描支付">';
$ ~! ~4 D; X1 H7 E& e, d" k/ o) d - }
& ]/ h% ]7 o! T/ S6 {! j' z! L - //调用查看结果2 B, Y3 s7 J) Q E9 B* W
- echo scerweima1('https://www.baidu.com');
9 i* a: E9 Q1 ?
复制代码 3. 生成二维码(不生成图片文件)
9 _9 ]5 n: L! b( _& S. P! i- //3. 生成原始的二维码(不生成图片文件)" G C+ G1 @. u7 D" B2 s' t
- function scerweima2($url=''){5 {7 Z' i3 |* P$ ]+ R8 } v- C2 @
- require_once 'phpqrcode.php';1 `2 W0 S( t) g p9 P: U: ~
- $value = $url; //二维码内容1 a! z4 d& ]5 `* d6 p. m3 t
- $errorCorrectionLevel = 'L'; //容错级别
9 w# `8 F4 V4 j$ v0 t$ C - $matrixPointSize = 5; //生成图片大小
- Y" t& u$ V$ X* ^3 p& { - //生成二维码图片' [; K* v6 n' T0 X
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);6 Y* A6 F6 }# e7 u6 E3 r
- }
* s% |9 K% t% B, t- C - //调用查看结果
- g* a0 Z1 i1 i+ c2 s. k - scerweima2('https://www.baidu.com');
8 A8 z6 ~9 J1 Q4 x' P
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
5 e/ ]. l9 j. r# e/ [PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 ^! e3 k' B& c2 j; K0 G0 G& Z在线生成二维码工具(加强版)
% ~ `: H: s- x1 ahttp://tools.jb51.net/transcoding/jb51qrcode1 d& }& N8 f, l& u v
在线二维码解码识别工具; \& x" i- `7 S9 s N) x, V% u4 O5 z$ V
http://tools.jb51.net/transcoding/trans_qrcode
& R5 T/ z, I# X0 A2 [; j4 |/ Q L+ i
& j* T' m4 x) ?3 B
, l, _5 Y) b% w) M' ^" v( b* z
$ n, M& }2 f( C/ k/ T; }
K% |8 ^- v6 c4 t5 l5 H+ m, @' |# r8 n* W5 c7 H2 a! _
|
|