管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:- P4 n" z6 V0 @7 V: C! s
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
% K$ P7 c1 I8 D s0 Q前期准备:
7 M2 T7 @* ~0 U" A1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode// M/ d0 E3 E; V/ w: r
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
2 {4 g! i/ I/ v3 W, L2 U) X方法解读:, t5 B4 N& c) ~/ K
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
- I* W% Y' l& @* w8 N' d- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
6 H0 V a2 V9 {; Z* r1 u - {: ]+ [3 |5 y$ h3 L/ v4 i
- $enc = QRencode::factory($level, $size, $margin);
1 u+ f+ i. y- e - return $enc->encodePNG($text, $outfile, $saveandprint=false);* s: B C J. T" Y
- }
/ R9 c+ e8 I3 |1 c
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
' p. @. I; ]$ h$ I d3 v' ` 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;4 }" n3 y# W7 |9 Y
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
8 r d! u% D( g q' X 第4个参数$size:控制生成图片的大小,默认为4;. i' m0 ^% f+ l3 R+ R8 ?, S
第5个参数$margin:控制生成二维码的空白区域大小;# M5 O/ O% e+ B' Q ]
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;0 A: g. D G3 J: Q' j+ K
使用示例:
# r- d' v! Z: [6 K" ]4 s1 t- O/ r1. 生成二维码(生成图片文件)
$ T z; a& S4 l( j$ b/ k- // 1. 生成原始的二维码(生成图片文件)
1 E7 l1 N' j! Y* o0 S% e - function scerweima($url=''){
/ v7 j$ O% u2 u$ ]' V - require_once 'phpqrcode.php';
. ~3 ? i' y: J, `5 \+ e% s - $value = $url; //二维码内容7 c* W, U' G! N1 {6 ?. j
- $errorCorrectionLevel = 'L'; //容错级别
' ~! m1 j9 H1 o& p* ~' ~7 ~ - $matrixPointSize = 5; //生成图片大小
8 c6 D* E4 E, j - //生成二维码图片! K" f) V3 R% Y9 p
- $filename = 'qrcode/'.microtime().'.png';' h# Q7 Q7 h* c6 K) P
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);6 W8 i. v( c$ N% W- L
- $QR = $filename; //已经生成的原始二维码图片文件
. A, N, z) V; X! I - $QR = imagecreatefromstring(file_get_contents($QR));* q1 f9 ]# A& e7 Z, k$ ~
- //输出图片
1 h! ~9 `# @0 v% |! i, i- P - imagepng($QR, 'qrcode.png');
( g( M! u; D! ^; F8 L; S) a - imagedestroy($QR);1 A8 O$ C, R+ T4 I' T+ Y7 s
- return '<img src="qrcode.png" alt="使用微信扫描支付">';$ H3 F3 x! G, e& ?& q2 v
- }7 m$ A2 b/ f1 Z- R# w; Z6 K, W/ Y
- //调用查看结果( d/ I5 M/ M- x, Q& V' y
- echo scerweima('https://www.baidu.com');
% X7 G6 ~9 Z( ^# i$ K/ y; j
复制代码 2. 在生成的二维码中加上logo(生成图片文件)) d2 M0 D+ A7 [1 R; L
- //2. 在生成的二维码中加上logo(生成图片文件)
/ ] d' [0 T) n - function scerweima1($url=''){
( P$ l$ Y+ A/ }+ ] - require_once 'phpqrcode.php';" o8 ~% a$ \, o, G% |" O% a
- $value = $url; //二维码内容$ ^7 z" g* k' J# E) f# i
- $errorCorrectionLevel = 'H'; //容错级别+ b6 x; ?, U9 H, y# H9 _
- $matrixPointSize = 6; //生成图片大小, n) l- [* f! m& U6 \7 m% _! X M* p
- //生成二维码图片
2 `8 R m% r- T: s3 { - $filename = 'qrcode/'.microtime().'.png';
( P1 @ P% w" }* H - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);1 Y8 n; o0 p8 B$ X7 W
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片( M, |( T: L* r% s* P: i; l7 M' m
- $QR = $filename; //已经生成的原始二维码图
9 e" ~) o! @7 U8 H3 W7 p3 Q - if (file_exists($logo)) {# S! I% ^. V# y$ w% M2 R! o! l
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。2 f* J3 F# q; w! L* w( h
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
) o1 D9 n9 b `- e: y, J: s - $QR_width = imagesx($QR); //二维码图片宽度8 q* G, L, D. t. A
- $QR_height = imagesy($QR); //二维码图片高度5 S# f1 b& L3 ]1 `$ U
- $logo_width = imagesx($logo); //logo图片宽度
) p: \+ ^& }9 D& }& z - $logo_height = imagesy($logo); //logo图片高度
% B- P' Z" n- ?$ [/ i) E2 f - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
! Q5 J1 v1 q4 `) t+ c - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)( ^: ?) U7 _1 n0 F1 D+ h: N4 z
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度# |; B: F% ]1 @; `; \' w
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点6 @ f7 K" C1 L6 G, S
- //重新组合图片并调整大小
# k8 K' m' j+ B+ U; e1 ] - /*
% R% A$ k% N, S) V% Z% n' b; Y: a - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中( ^& e! ]- u& w2 Q3 |' ~3 y
- */
4 o; s9 W7 Y& D/ U: z" S - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
. Y9 x1 S8 v* w# ^3 z) Y - }) ^# A- G0 F; d" W) K! k
- //输出图片
4 n: t* U. ]# [0 `" l d - imagepng($QR, 'qrcode.png');9 h5 s$ w' y$ K: Y' i1 T
- imagedestroy($QR);
& s6 T; }% D7 C! v. ^ - imagedestroy($logo);
6 z# r: t+ ^- a: Z3 N3 }- B9 e6 R - return '<img src="qrcode.png" alt="使用微信扫描支付">';
$ P/ A3 |; R0 |3 [+ R - }
; R7 {$ @/ Z! ?) x. J - //调用查看结果
) s. A, ` j" M. O" P" b - echo scerweima1('https://www.baidu.com');
1 e' G5 k* }4 |) o
复制代码 3. 生成二维码(不生成图片文件)
, ~. [7 d+ w; z/ _ i$ E) z- //3. 生成原始的二维码(不生成图片文件)
8 l& \3 m" F2 ?9 W8 d - function scerweima2($url=''){
3 \5 J5 p* j* s X - require_once 'phpqrcode.php';5 q s8 u5 W# k+ O- A+ _! ?4 E
- $value = $url; //二维码内容! m. y8 f+ e* [. i2 f8 g z
- $errorCorrectionLevel = 'L'; //容错级别
5 t% ]: ^0 x) ?+ P. c* s8 A+ I - $matrixPointSize = 5; //生成图片大小
$ ~1 q6 ~* R4 |( a: z* R - //生成二维码图片
! ?! |5 t, \! Y. v! Y, a$ G2 b - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
$ S5 {' j& j' E* c& k - }
, H, K. S, Q4 O/ A+ m - //调用查看结果
; i( a" I: l y3 ^ - scerweima2('https://www.baidu.com');
- Y0 J% x" | K- O( l6 w
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。% b/ L; H/ _& q7 S" U
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ G% L8 u* n j& E3 z
在线生成二维码工具(加强版)
. F) X" l3 ~# H9 Z' u8 a# s' S5 Yhttp://tools.jb51.net/transcoding/jb51qrcode
8 D2 ?1 y. {% \ u" O0 f在线二维码解码识别工具
, z$ X' s: o8 Q( Xhttp://tools.jb51.net/transcoding/trans_qrcode$ F+ G0 c+ Y H5 Z$ p! O' g+ n
/ } R( K% B, V, k- Q9 N
5 S( y8 ?; @3 C% V8 c. n! [
, k/ C6 l, q, U; h+ g, M z; ?$ u' p
! M5 v- Z6 v; y8 J% a |
|