管理员
![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif)
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
& b0 z! f$ v) o& j' g: z使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# k9 D- V6 Q/ x7 F: ]1 o; N& T! X
前期准备:/ _2 |0 \: q* y$ ~' @, g3 e. W
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/: `; i0 _" t$ t# j) L. |
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)0 o8 k4 R0 r: M2 q- ?& G6 Z3 f6 t
方法解读:
$ w( Z4 F% d; c. Z) ^6 @下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):, N! q+ k0 [, Q" E2 @' f' l. J
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
5 \6 F0 }" ?$ c/ d) L% S% n - {
0 F; g. H9 u+ l! W/ f" @* W4 j- y - $enc = QRencode::factory($level, $size, $margin);! X6 A; [/ L' |
- return $enc->encodePNG($text, $outfile, $saveandprint=false);4 F9 K0 Q' x# K: l8 L8 Q8 J/ v
- } z. a# v% m3 G
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;( f$ @5 `9 `! g( a7 }
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
% F: c/ N# A: W9 X; | 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;- A9 a- {6 s' d7 |9 b5 p5 u2 E( v
第4个参数$size:控制生成图片的大小,默认为4;
* b* A/ W9 Z8 \# d! X- z5 m 第5个参数$margin:控制生成二维码的空白区域大小;
3 c3 f7 g4 S( {7 H 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;/ ^" i' L: i, O
使用示例:
( ~& J: s2 `, N1. 生成二维码(生成图片文件)" c* U* X( O. J3 `$ b
- // 1. 生成原始的二维码(生成图片文件)5 x" N& `9 f4 g0 Q# ]* G
- function scerweima($url=''){! N( a! g2 |( e) n ^7 r ]
- require_once 'phpqrcode.php';$ ~5 M( ~3 L/ {+ W9 b
- $value = $url; //二维码内容6 E- [9 A% C; O; A
- $errorCorrectionLevel = 'L'; //容错级别
' y S# ~& u* G p& n - $matrixPointSize = 5; //生成图片大小- E5 u; N; \9 E$ T4 N$ r+ ]: I9 U
- //生成二维码图片
; D. A& ?0 s: H6 B5 s - $filename = 'qrcode/'.microtime().'.png';& e3 N8 s, G# n$ U3 @% t3 K! V/ Q4 O
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
7 ^4 \& |, @5 A8 T, m - $QR = $filename; //已经生成的原始二维码图片文件; E1 N1 c5 n& A3 L6 {" \
- $QR = imagecreatefromstring(file_get_contents($QR));5 k6 Y( x) w) D% D" _
- //输出图片
3 ~) S+ K7 B t- U9 P- y - imagepng($QR, 'qrcode.png');
: `$ a: u7 H7 M! f, R - imagedestroy($QR);
* @" y9 u; D9 U" V( Y6 _ - return '<img src="qrcode.png" alt="使用微信扫描支付">';' l2 N+ K# s D3 a- U# M
- }+ W- n$ e8 C' [3 w: [
- //调用查看结果- d' r4 v; ~5 L4 Q; P. E' b) G
- echo scerweima('https://www.baidu.com');% a4 h$ x* t3 J1 `' M
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
6 m1 ]7 z+ s" K6 O3 G! ~ y- //2. 在生成的二维码中加上logo(生成图片文件)- r7 t: [; B6 _9 Z: ^
- function scerweima1($url=''){
! G6 I! M7 D& U1 ~2 t - require_once 'phpqrcode.php';3 J, G! N. r3 T) k- ?
- $value = $url; //二维码内容: j' H7 P( G5 V9 _% {8 a4 C
- $errorCorrectionLevel = 'H'; //容错级别
& i! J; d9 ?/ D( C/ F; ` - $matrixPointSize = 6; //生成图片大小
+ ?; v" F5 Z: [( p& G! M4 F/ m - //生成二维码图片; }! t# B2 m- l7 q# N! |* J# }+ T8 l" f( i
- $filename = 'qrcode/'.microtime().'.png';
: [ N3 b- @) i0 Q - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
" \, N( X6 D- r! u0 e( Q( ? - $logo = 'qrcode/logo.jpg'; //准备好的logo图片+ w2 ^0 I' Y, t
- $QR = $filename; //已经生成的原始二维码图
) e8 [; g* l% S2 |1 W - if (file_exists($logo)) {
/ Z7 `2 z% ]4 L - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。! `/ J$ W- F; K& z/ Z& p
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。. D9 `5 P! ?" H/ s6 A- b
- $QR_width = imagesx($QR); //二维码图片宽度) l. F# E6 {' Y5 ?& L
- $QR_height = imagesy($QR); //二维码图片高度
- Z9 M6 Y( V# ]# l( d$ m& V - $logo_width = imagesx($logo); //logo图片宽度
/ k. K1 G! n0 |' |6 z n/ C- W - $logo_height = imagesy($logo); //logo图片高度: }. S( Y/ j0 _- S) L3 ] W" ~
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)6 n+ u7 X0 z+ u6 U2 N! j
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
, \6 }# ^! w M5 a# k# f4 U; a - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: y0 E: Y( P" Y2 ], E/ ~$ L/ M
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
# t! W& t! U; ~# T5 d - //重新组合图片并调整大小
2 V) q% v4 U# J: [/ n. p2 m - /*
+ x. c- [- P1 B- f: P5 k - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
) }; A2 O8 T) O' m0 v( t r. I4 r9 e - */7 J* u; U G8 \
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
$ U6 z+ R1 o4 I$ Y' |- N4 | - }
; i% o3 |% l5 l5 p - //输出图片
" L; }' ?! R1 {. s9 X) A) N! D - imagepng($QR, 'qrcode.png');# T& P8 B7 h3 x2 D1 k9 V! I
- imagedestroy($QR); V& s I5 N. Q
- imagedestroy($logo);
$ _* Z0 Z& x' H. z - return '<img src="qrcode.png" alt="使用微信扫描支付">';
4 U5 P% Y9 ~! P% J - }
$ G+ N$ D/ @7 P' i& y( e - //调用查看结果
) v T. Z2 y* i6 M2 ]' H+ @ - echo scerweima1('https://www.baidu.com');/ k% D4 E( C# p- Q: k6 \9 i
复制代码 3. 生成二维码(不生成图片文件)
( T: g4 A: X2 _' q2 `4 g- //3. 生成原始的二维码(不生成图片文件)
( j) |4 [5 ~; y" }& ^5 J - function scerweima2($url=''){' {% _2 _. N9 Q( p
- require_once 'phpqrcode.php';
0 d: t8 K F; X9 x - $value = $url; //二维码内容! U5 d5 Q7 N5 \: W2 i5 b8 |
- $errorCorrectionLevel = 'L'; //容错级别2 v6 ]- C( r2 D. S
- $matrixPointSize = 5; //生成图片大小
/ ?$ z) [0 G) O+ K A/ d - //生成二维码图片9 l, a4 l3 o% l
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);; |, E4 Y0 c' P0 j. g8 d) X
- }
" }% Z: j; r9 \& b - //调用查看结果
& X/ F1 x$ X9 z$ z+ s - scerweima2('https://www.baidu.com');
, }9 B5 f. y R T6 ]
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
& u! g; U5 ~& b+ N( YPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 ]. x9 p/ s/ V# x( T9 ^
在线生成二维码工具(加强版)
: J7 F& _; c9 {1 F5 w* |2 Khttp://tools.jb51.net/transcoding/jb51qrcode; ^3 d& I$ q- G3 [+ [
在线二维码解码识别工具* X! v0 l' h# j+ W* D* j
http://tools.jb51.net/transcoding/trans_qrcode
; K- J1 l+ G1 h- q3 u
) v& @5 S# [, q0 ]
" ?* T. A: f( ?! M8 u% D+ f+ \/ i6 g y7 }7 I" t
8 S. |$ H/ P/ j- ~( |2 v0 ^, g! r/ X5 q8 m# A4 a
|
|