管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:2 T1 j8 {2 {% D! E) U0 i
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
1 \9 w( c+ y" Q: m' H9 d前期准备:
2 p0 p2 P' h( M f1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ r$ e1 |) r' G% g$ T4 @+ ]' `
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态); B' G) m. C5 A2 b
方法解读:
/ H9 f( B- g/ f下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
5 P2 G- b1 ~: V+ D9 m0 ~' P% c* ]- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
7 }9 v5 ^% s6 Q- j6 q# H - {
8 ?5 ^+ d) D: D' G0 B r* V1 a! | - $enc = QRencode::factory($level, $size, $margin);5 F ^/ D' y O( K
- return $enc->encodePNG($text, $outfile, $saveandprint=false);" S. g( H9 e) m. U( L0 g8 y. G
- }6 ^4 D7 {$ R& k
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;+ a3 c. q' |8 d
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;. l3 x, i2 F. m* X: [% J
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
% H0 ~& r; I2 S( E- O: J/ K Y 第4个参数$size:控制生成图片的大小,默认为4;
, o" ^8 k* x$ P* j: q 第5个参数$margin:控制生成二维码的空白区域大小;
; v+ K! \4 B4 U( `$ P7 S0 B$ Q 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ w" S' R. f H- d9 |9 _0 T" r) \3 @( }使用示例:: f9 D. s, q& Y) r ^1 d
1. 生成二维码(生成图片文件)
+ }" k; l" ^6 H$ |! {6 x0 j- // 1. 生成原始的二维码(生成图片文件)
* G8 p$ y$ v& H1 S' e: q O - function scerweima($url=''){ P8 H2 H) h4 }) b& U: i
- require_once 'phpqrcode.php';$ S, P! {) u" s( Q6 ~
- $value = $url; //二维码内容6 W* P) X; T/ i! ~
- $errorCorrectionLevel = 'L'; //容错级别& G/ f9 x. c# \. L
- $matrixPointSize = 5; //生成图片大小
7 M. R4 D0 s9 n! S+ e8 [5 {% }. z/ b! R - //生成二维码图片
4 G% p4 K1 `+ s- D8 H - $filename = 'qrcode/'.microtime().'.png';
! d4 G' U4 X8 i4 \9 X - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
9 c/ k" N) L5 C( j9 X9 _ - $QR = $filename; //已经生成的原始二维码图片文件
3 ~7 I1 h6 ]% A - $QR = imagecreatefromstring(file_get_contents($QR));
4 r' i4 ?& w' M - //输出图片
8 Y1 ], s2 d+ g% ~5 V$ ?& E - imagepng($QR, 'qrcode.png');$ Z8 b" X' C/ H( ~! X
- imagedestroy($QR); a) U5 I3 Q& X! m
- return '<img src="qrcode.png" alt="使用微信扫描支付">';6 S) j& r7 j" u
- }1 r+ ?* Z* Z Z+ T5 j) ^* c
- //调用查看结果/ Q* D$ k3 R7 p& D5 a# `
- echo scerweima('https://www.baidu.com');
, L6 g a% s; c2 A+ ^3 \
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
+ [& F' B# c# y1 c: n9 _- //2. 在生成的二维码中加上logo(生成图片文件)$ U+ |8 e0 p7 y% }: a
- function scerweima1($url=''){) W' w3 c4 a: j4 W# n# z5 U
- require_once 'phpqrcode.php';
4 {% d% {; ~6 q; a, z - $value = $url; //二维码内容1 {$ h a5 }5 L6 ]" a
- $errorCorrectionLevel = 'H'; //容错级别
% O7 m6 W: T* { - $matrixPointSize = 6; //生成图片大小- C$ P' [8 f0 k; j0 h7 ~/ o" |
- //生成二维码图片( I; h! c1 H9 K! N0 r+ O- p
- $filename = 'qrcode/'.microtime().'.png';& r& v% O b: r) P# |
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
5 y! ^0 n/ V0 ~9 E+ ~& a6 \ - $logo = 'qrcode/logo.jpg'; //准备好的logo图片# I/ h3 j/ @7 M' M/ N) q4 B
- $QR = $filename; //已经生成的原始二维码图
?6 ?% X+ |9 e3 V" a - if (file_exists($logo)) {
! f! u2 M4 F) I7 n - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。) ~/ s) X2 D' o! m8 I
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。' q A; v, G6 x R& t; C2 k3 R
- $QR_width = imagesx($QR); //二维码图片宽度
" f( J, N$ y$ ~4 O6 s8 H; e } - $QR_height = imagesy($QR); //二维码图片高度+ K; ]; @) j0 Z4 o j
- $logo_width = imagesx($logo); //logo图片宽度; g* ^% s* W) M1 f5 K( h
- $logo_height = imagesy($logo); //logo图片高度
! x* c4 d6 K7 y' u3 a7 l - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)% d, i/ Y# Z7 @+ e* V5 |
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)3 ?& m& s0 W: T4 x% k
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度 L* {5 ^2 _, _; c- R
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
, C& g' f4 F' t% G' x - //重新组合图片并调整大小- N/ p' S, n$ x/ I1 h, n* \1 X
- /*
* W: X7 ?+ |) m7 r4 `; x/ J - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中6 p; F5 w. u& R1 W+ ~0 Q
- */
9 n+ k$ @+ v/ k4 s4 @0 ]2 o0 W - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);* T9 y e3 j$ T0 E! Y9 h4 |
- }
) W! E3 ]- m' Y - //输出图片
0 X" n3 v$ L3 A ? R - imagepng($QR, 'qrcode.png');5 q. c/ a6 [% L3 [9 C
- imagedestroy($QR);
+ ^9 @) j+ @6 |5 n n - imagedestroy($logo);
! Z) F+ o* q) w. ^' f - return '<img src="qrcode.png" alt="使用微信扫描支付">';
- J8 L) h/ r2 C - }! s: w. R+ D' b! E6 D/ v1 M, U
- //调用查看结果( S- j n' c l
- echo scerweima1('https://www.baidu.com');2 }% S/ O5 Z- C1 r$ `: y
复制代码 3. 生成二维码(不生成图片文件)7 j5 e7 U9 K' \2 ~- ~
- //3. 生成原始的二维码(不生成图片文件)- y) X v3 R! H5 Z4 V- v4 p
- function scerweima2($url=''){
/ P7 u& t3 L" B - require_once 'phpqrcode.php';
: c) @$ S6 T( a$ O; Q - $value = $url; //二维码内容
) j- z: Z; a7 r7 @% u - $errorCorrectionLevel = 'L'; //容错级别8 { z+ o3 J3 F6 ~2 N/ Q7 h, |
- $matrixPointSize = 5; //生成图片大小
# U" W s- _6 g - //生成二维码图片
5 G W: L/ n3 |* ?6 i! } - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
3 X$ @7 n, s( j: p9 y$ ?: h v: ` - }' L0 d7 `& D! V# A5 `
- //调用查看结果
( W+ m( ]# \, Z0 u5 m0 {% q) t( ^ - scerweima2('https://www.baidu.com');
/ ?6 D" q/ y# p3 q6 W' B: \
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
( G. i% l. Q; R! O N- ^PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:( ]% s5 v% W7 E% U+ B4 B
在线生成二维码工具(加强版)2 {- u+ ?9 E0 @
http://tools.jb51.net/transcoding/jb51qrcode6 N9 d6 T7 D, C
在线二维码解码识别工具- [2 N7 g; P, j4 [( R, T P0 G
http://tools.jb51.net/transcoding/trans_qrcode# z; l* y- F- Y. R0 z2 x7 s/ m
c6 ~/ r% H- O4 \& @/ N. S+ p
* u+ V7 t* W7 y1 K/ M
. I, ]" V, i# a7 Y" b. F
# c, D+ h7 ^% W3 C# N4 Y6 R
! h! B. M4 o5 p |
|