管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
7 {4 {+ i- a2 D+ P" x( L7 R' ]2 H使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。- Z8 `+ E& i3 g9 A1 `- V
前期准备:
0 m, \0 J/ @* ]5 t3 Q4 a1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/+ l; |0 z: L* o, _
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" ]+ k( ^$ a( A! Y- O' C, u
方法解读:
d1 g2 |* G0 R7 N+ O7 [7 K下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
' y7 ~" m6 ]) c1 B# M- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
8 ` P# z: v6 K6 U7 i# [6 z8 } - {0 }' |9 ^" U/ `' N: v& X7 ?& ~
- $enc = QRencode::factory($level, $size, $margin);# w) d+ \/ U3 S' A+ O2 E9 }
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
& b4 }7 d' P7 m9 O4 j - }# W& v, q2 V- K2 {
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
z! M0 J5 U' b# X" [. @ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
1 v7 x8 y+ `! v U 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
/ \: n# E. R9 z; B7 h 第4个参数$size:控制生成图片的大小,默认为4;* ], O$ M% K& @* f* W. S5 L4 c
第5个参数$margin:控制生成二维码的空白区域大小;, F( w$ X& T j7 m; T6 D$ e
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
& G) p8 l& b" M) G# J使用示例:$ a5 F7 i: k* j1 n
1. 生成二维码(生成图片文件)" f* X2 T6 Z6 c. Q- y* c& \
- // 1. 生成原始的二维码(生成图片文件)
' X$ G1 I' ~3 V( [! f - function scerweima($url=''){
$ R, I7 J% B; w+ K - require_once 'phpqrcode.php';: s; Q, V8 a# H' T
- $value = $url; //二维码内容3 ^3 v0 \' d* P) ?! p; F
- $errorCorrectionLevel = 'L'; //容错级别2 F7 `- c% {0 {
- $matrixPointSize = 5; //生成图片大小" }. k2 ?# z/ \1 @, Z/ K+ ~
- //生成二维码图片5 ~. h4 p1 B5 P; q; l; Q
- $filename = 'qrcode/'.microtime().'.png';
% a: M; o" M# h - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 f7 e4 v7 k0 l) O' U - $QR = $filename; //已经生成的原始二维码图片文件
6 B( J& D+ ~3 G - $QR = imagecreatefromstring(file_get_contents($QR));
. }7 t/ @2 Q$ o! ^! v- A& B - //输出图片
" w" h6 [" B+ M - imagepng($QR, 'qrcode.png');
6 K* \2 P0 O- R - imagedestroy($QR);3 S" U) Z9 ]% u' O) C
- return '<img src="qrcode.png" alt="使用微信扫描支付">';# w- P) {8 U* H# y( A' O4 W* \5 z3 b0 @
- }
; V- H! j4 k5 C: Y8 O" {; H - //调用查看结果, }" e7 S' C1 E! c! [; y
- echo scerweima('https://www.baidu.com');3 T! _2 m' o. [) s1 a/ M: |& h
复制代码 2. 在生成的二维码中加上logo(生成图片文件)/ y1 s. l# n) ~ w3 E
- //2. 在生成的二维码中加上logo(生成图片文件)4 P, b" |8 ]7 o. A# j; ^* \
- function scerweima1($url=''){
/ z. j& u" u5 r b* i2 a - require_once 'phpqrcode.php';
) g& v" H1 H% J, S9 P - $value = $url; //二维码内容
# y0 I" b7 t6 ?$ g) } - $errorCorrectionLevel = 'H'; //容错级别6 f$ }* P" s4 ]; p" F
- $matrixPointSize = 6; //生成图片大小; ^3 d( }- E6 \
- //生成二维码图片" W2 J u1 J3 i0 w! k" q# r
- $filename = 'qrcode/'.microtime().'.png';
7 R3 V9 e+ S) d. i T) e# p, k - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);. { m" W$ _- g* U" @) x
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
( t8 h$ N. N2 p3 T - $QR = $filename; //已经生成的原始二维码图( ?( e/ Z7 A# j* L. ]' s) _
- if (file_exists($logo)) {
+ F! N/ x" {! `# p - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
3 M- t! G4 j+ o0 }0 g - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
) a0 e6 K! t! [* } - $QR_width = imagesx($QR); //二维码图片宽度
0 e5 w; ~1 `# i# w7 U6 o! t - $QR_height = imagesy($QR); //二维码图片高度
7 F0 @% y* Y: l5 x& H - $logo_width = imagesx($logo); //logo图片宽度- [! y5 Y+ Q) p
- $logo_height = imagesy($logo); //logo图片高度! U/ }6 j) @! S* y. }& |5 @# D' m
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)0 ]" D p6 g3 _2 C& t- a
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)' F/ \9 L- p3 H
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
A' j4 F/ W( h" I7 v1 ~ - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点) b4 J( [! }/ o. t
- //重新组合图片并调整大小
2 X @5 U! R7 z; } - /*) y3 r9 N) o2 I+ `$ G) Z* h% ^3 `
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中( e( R& D+ x7 _) L; w5 e# l) g$ Q
- */
) P1 P2 F1 \8 }3 f - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
2 j, A" e$ s* X2 n- i I) L( S - }
1 @$ d1 s7 y' a% y- ]5 g6 ~+ q - //输出图片, H) U x7 i( l- l. } V5 k: a. f
- imagepng($QR, 'qrcode.png');
/ r3 c0 P: i' O9 f - imagedestroy($QR);$ E+ }! G) |. T' s j& s1 t
- imagedestroy($logo);+ E* g! ]2 U% h+ Q) U( m
- return '<img src="qrcode.png" alt="使用微信扫描支付">'; t; T1 Y# S. W" B
- }* i/ Q0 X6 D5 W' v* h# [! h1 {
- //调用查看结果
% N: S$ V& P+ e& z' j7 W - echo scerweima1('https://www.baidu.com');$ A+ }0 h* q, q0 ^
复制代码 3. 生成二维码(不生成图片文件)
8 A3 @4 e8 r* k% `/ Y' x- //3. 生成原始的二维码(不生成图片文件)8 Y1 z5 `& e' p
- function scerweima2($url=''){
* N+ A, x" _: i" | - require_once 'phpqrcode.php';8 n- @) E4 }% {6 |6 \
- $value = $url; //二维码内容! s; m7 {& u# T2 ?
- $errorCorrectionLevel = 'L'; //容错级别
+ W' b) m/ N- ` - $matrixPointSize = 5; //生成图片大小3 @. d# X4 E$ B
- //生成二维码图片' J! M: f3 W$ l% ^) }# U# l
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
. c% A' @" q, U: k: O - }
" X- ^$ u3 y- Z; o+ M6 M - //调用查看结果3 F9 v1 y) c7 Z1 C
- scerweima2('https://www.baidu.com');
+ O9 {3 {; \/ P9 \; e2 j2 b1 [; i
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。5 C" p- Z( l& ^; h) p( i+ t' z
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:! h( _. E/ Y+ T% C9 S
在线生成二维码工具(加强版)- H7 V6 s9 ?2 S) J: P1 m/ n
http://tools.jb51.net/transcoding/jb51qrcode" @0 k8 N0 c. H9 f
在线二维码解码识别工具: \. z/ |! [& Z7 p1 g5 h, w" h, `
http://tools.jb51.net/transcoding/trans_qrcode8 j1 V. k7 j2 n
" V+ I/ r% a, E; H m! E7 Z5 i q" E0 ~5 ^" U7 A+ m
+ q% o2 H) ?+ d( ~& [1 ]
0 A* g* w- M$ l5 v: z/ b7 R
9 t: y4 i; K d/ w |
|