管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
$ }7 K; s% i/ f2 \' r v/ j1 T使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。. Y9 ~2 o. G8 J& {* v6 o- p
前期准备:* G6 n! n) j; N9 }" `- f
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/, a8 t# x, c- H/ e# g
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)4 j& S; {1 Z% d* W8 D7 g
方法解读:
) J) \9 z& l* i- z2 J$ D" ~6 v3 x% X下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
/ D& u) B6 Z: F. v- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false); y# V* c6 v% e4 K
- {' s2 r% `3 r/ t0 y- ?4 n" A* w2 a' j
- $enc = QRencode::factory($level, $size, $margin);
1 {; Z' I; c' w H2 o" k - return $enc->encodePNG($text, $outfile, $saveandprint=false);: `' C {. Z7 W- M H- q. ]
- }1 R N+ d4 y, `1 l/ I
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
( ~2 |8 y1 J/ a/ ^ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;( `% @! U8 [0 w5 ]8 F
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;3 A- b) }9 I; n0 I
第4个参数$size:控制生成图片的大小,默认为4;
8 t# r4 Q; K1 _ T3 \ 第5个参数$margin:控制生成二维码的空白区域大小; z( S9 \. _' C$ }. |
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
9 P) I& l/ g( |- a7 b: S使用示例:* ~1 M3 z G I7 W [& H0 y
1. 生成二维码(生成图片文件)2 A0 _5 _/ a' p2 m0 V. w/ g* s6 {
- // 1. 生成原始的二维码(生成图片文件)/ z) b$ a3 g j: l
- function scerweima($url=''){
: }/ u8 E8 x- c - require_once 'phpqrcode.php'; X4 b* j p9 H% R5 r
- $value = $url; //二维码内容, X \5 L: S* P( u% p4 x6 L) U
- $errorCorrectionLevel = 'L'; //容错级别
) q! F' {* v9 B; {# J& h4 l3 k- t - $matrixPointSize = 5; //生成图片大小
, O4 Z8 }5 H8 E* W - //生成二维码图片# t6 A' @0 B: v+ g2 x3 O% }
- $filename = 'qrcode/'.microtime().'.png';# g, T2 T( u4 k& l+ q7 R/ B
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
) g+ N8 G2 P5 k5 a" C5 F7 p - $QR = $filename; //已经生成的原始二维码图片文件
% k6 ?. R' D" q! c6 r - $QR = imagecreatefromstring(file_get_contents($QR)); a; z: B# y7 f$ F
- //输出图片7 R, {% S4 j( e/ Q7 K" t
- imagepng($QR, 'qrcode.png');
2 r% j. \1 {; k - imagedestroy($QR);. h: w3 u0 x) V, R
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
3 q7 e/ g& C9 c6 a+ i/ o - }
6 p- H2 E+ q3 _" p8 p - //调用查看结果
* ^/ w( P& m# w) X# ~4 ], m - echo scerweima('https://www.baidu.com');5 G3 f7 i* L e
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
k2 s+ `8 X0 y5 \% \# q- //2. 在生成的二维码中加上logo(生成图片文件)5 D6 |' k* L# N& u
- function scerweima1($url=''){
2 X1 e: z. H/ s+ l* X - require_once 'phpqrcode.php';7 V# X: K. a1 ~; y% O. [# s) w
- $value = $url; //二维码内容. h, i) M! G/ E. }& Y
- $errorCorrectionLevel = 'H'; //容错级别- [2 K. w4 b1 x1 A% ^8 O
- $matrixPointSize = 6; //生成图片大小) S z A9 w0 ^. x8 ?
- //生成二维码图片: g: d0 _& Q9 p3 G* q8 \
- $filename = 'qrcode/'.microtime().'.png';
2 [# N2 P1 q- @! N& l - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
: r! W. Y) Y$ r: J9 d# P - $logo = 'qrcode/logo.jpg'; //准备好的logo图片, c1 r% w* S- ?. a; }
- $QR = $filename; //已经生成的原始二维码图6 I1 L g& E5 c3 M# u H1 v, a+ e
- if (file_exists($logo)) {
/ V$ T9 }8 y( M0 T" t6 J' c9 _4 J9 I - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
5 Q7 U" j9 C, [0 J/ i) C0 i7 ]3 A - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。1 e2 Q, s1 X9 k! F. h) z5 b3 ^- E" K
- $QR_width = imagesx($QR); //二维码图片宽度" ^% E% Q& d: u; H, e
- $QR_height = imagesy($QR); //二维码图片高度
# Z' c7 ^8 B4 K/ w6 \3 ? - $logo_width = imagesx($logo); //logo图片宽度
( Q: ~& A6 O' k" s6 x - $logo_height = imagesy($logo); //logo图片高度
- Z4 p3 z# c" q/ l2 Q0 @ - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
3 e7 ~; ~: |+ i- U5 h - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)& |4 {& y* z H
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: F2 u7 y8 b1 `( X
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
U$ S, u+ n+ v7 N5 t/ c - //重新组合图片并调整大小
% v* R7 w/ f7 B- f% O' m" c5 |. D - /*
& q4 Q0 _% T2 D8 E" v3 H$ P V- | - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中3 r# y8 V/ t/ ^& S; t0 a
- */, B* z, Y) a1 U+ r
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
[$ i1 w! [3 V/ m a7 q - }
! j% n% S* @) T7 P) n - //输出图片
8 Q8 H& G9 }! m. J+ W: c$ U( D - imagepng($QR, 'qrcode.png');3 L. n& L8 W* C8 }' N! a. x
- imagedestroy($QR);
, c6 G5 E4 Y5 g - imagedestroy($logo);' \( I+ g5 D; h* P9 S, ~
- return '<img src="qrcode.png" alt="使用微信扫描支付">';/ d' O! C" c5 ^& R
- }& o/ e2 e8 F) ^+ @. l6 `
- //调用查看结果
, d# P( C5 c( B1 [6 W+ {1 Y - echo scerweima1('https://www.baidu.com');& }# V, {/ R1 c- p, f' W) X5 d
复制代码 3. 生成二维码(不生成图片文件)
( @' }% ^: p3 A9 w% ^- //3. 生成原始的二维码(不生成图片文件)
* j8 o0 {0 e0 l- q2 L/ N7 l" D5 L" U [ - function scerweima2($url=''){6 p/ i# Y5 v! _, R; d+ ^1 {
- require_once 'phpqrcode.php';
" V' N. w* g/ l+ l% B- O3 j! A - $value = $url; //二维码内容, v d4 C/ @% I, K K# a; ?' x
- $errorCorrectionLevel = 'L'; //容错级别3 D% ^- q' k' \( ^8 g6 r: ]( g/ P
- $matrixPointSize = 5; //生成图片大小* W; X" ^7 ^1 B; _ P& V' J6 E9 p
- //生成二维码图片
# y2 J, L) P' G6 t9 ^ - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);* {% a$ H$ m9 B6 E- K
- }
# |- `" f. ~6 Z. _; N - //调用查看结果; S; H N# d6 h' j
- scerweima2('https://www.baidu.com');3 E3 N1 J' @ e9 n3 i: {4 t
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
# F0 _3 i6 h: i7 l+ YPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ l/ ^5 C' e' H" m8 `4 ^
在线生成二维码工具(加强版)
3 s% N& r* ~# h$ [& f* ahttp://tools.jb51.net/transcoding/jb51qrcode' N4 b! s$ Y1 U s1 T
在线二维码解码识别工具
. |3 P2 T4 q) V, H% y( g& P1 xhttp://tools.jb51.net/transcoding/trans_qrcode$ L% n {' L! A9 {) V
; B/ K' b! T5 h- p! I5 {, g5 H
@0 |/ B2 }" f4 C7 ?
& E( E3 h0 F! `3 O
3 ?+ P) A6 P8 s* x/ u+ I; G/ Q" A" r: e
|
|