本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:! ~. V' p3 P) g6 ~
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
" q% |5 t2 d9 b! L8 j前期准备:
' U1 q. Z, p4 T0 y4 W1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
/ V2 x, {! e3 x7 H. l 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)$ g# h1 [8 ]$ i8 C# a9 F
方法解读:
+ P9 @# @8 u6 `3 M下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 O! Q1 l1 q, j0 ^, u, ~3 f- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)+ p. ]; P" `$ x6 M
- {
3 t, p6 [# {2 |5 r! }, E - $enc = QRencode::factory($level, $size, $margin);
% e. I% \0 ?' V ~# Y - return $enc->encodePNG($text, $outfile, $saveandprint=false);0 j1 u2 a# c+ K, |8 a/ A$ {: _1 o
- }! d! l2 O* x( O+ i& c, C( L
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
9 }1 F% h! q. ?+ r( l" O 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;1 x( C) U- j8 `) L; R3 \
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;1 |* Y) b- ~6 S# c
第4个参数$size:控制生成图片的大小,默认为4;
' j; y& _% H& r5 j: R 第5个参数$margin:控制生成二维码的空白区域大小;" ]! ~( C8 p/ z5 R5 G" N, X) _9 h
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;8 ^( H$ j6 F' O+ Y% R0 R& L" m
使用示例:
; J) d7 @2 }* N; M0 \* S( R: i/ `3 \6 }1. 生成二维码(生成图片文件)
4 U7 ^" Z% \+ S/ V$ e- // 1. 生成原始的二维码(生成图片文件)) b7 _ b6 s- C$ Y; l" H
- function scerweima($url=''){
% U1 T9 u8 y/ w& V - require_once 'phpqrcode.php';( k$ |8 N# p$ z9 `7 y- {, E) p
- $value = $url; //二维码内容
# K/ a: ], M m k* W - $errorCorrectionLevel = 'L'; //容错级别1 `0 f( @. p( O3 o
- $matrixPointSize = 5; //生成图片大小
+ r. A9 F i' X1 ~6 [9 b/ S - //生成二维码图片
, C3 O; F% B7 c( G9 T - $filename = 'qrcode/'.microtime().'.png'; Y+ t3 u9 K6 G' n7 }
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
: M* J. H _) T - $QR = $filename; //已经生成的原始二维码图片文件0 }' o" v5 l& t) v
- $QR = imagecreatefromstring(file_get_contents($QR));
1 q5 `: N- t& ] - //输出图片
- `/ A# |( G2 n8 f- ~3 z - imagepng($QR, 'qrcode.png');
4 g0 g$ F& E5 Z: B& Z& C - imagedestroy($QR);; w) I9 E$ |, U7 n
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
) P% j3 a7 d; \/ q9 U1 D - }' q- }0 B& `8 s$ R% s
- //调用查看结果5 c* `2 s! {/ C- p
- echo scerweima('https://www.baidu.com');
& ^; x/ l. G+ u
复制代码 2. 在生成的二维码中加上logo(生成图片文件)) P- O+ \6 C Y
- //2. 在生成的二维码中加上logo(生成图片文件)* v' n4 m; ]' X; w/ @' e
- function scerweima1($url=''){& m) G+ }* p8 f+ m( W
- require_once 'phpqrcode.php';# U% l8 o/ W4 W2 d; g& A1 N
- $value = $url; //二维码内容
* O1 P) m0 | U' r: t - $errorCorrectionLevel = 'H'; //容错级别7 A E8 i) u& x% V7 c# [/ V& W( j/ k5 X
- $matrixPointSize = 6; //生成图片大小 u# W" d; ?7 ]! S0 t$ w! S
- //生成二维码图片
6 ^. y' N0 U" C3 z% ^* J - $filename = 'qrcode/'.microtime().'.png';
$ s' G! D6 O0 q - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 g* w0 ~/ d9 h5 r& v n) x - $logo = 'qrcode/logo.jpg'; //准备好的logo图片! N. z- o" U, D! B6 [
- $QR = $filename; //已经生成的原始二维码图
0 ^/ F6 v/ V6 I- }2 R - if (file_exists($logo)) {) d1 p& v+ g+ W' t
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
6 S+ I( O2 W" T1 \. U - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。( Z, Y" }2 l. z+ F( `5 q" K \
- $QR_width = imagesx($QR); //二维码图片宽度7 ?' p. U% G( x7 l) W7 k
- $QR_height = imagesy($QR); //二维码图片高度; T+ Y7 \( c* e4 c
- $logo_width = imagesx($logo); //logo图片宽度
8 {' t2 d. k+ P: W - $logo_height = imagesy($logo); //logo图片高度% V; N: b# N+ h. p/ d
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)0 W' n' j, z. @( y
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
: q" w: Y5 c: k - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
9 c! U1 t, N) u& r - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点# N; x" H8 G+ { ]+ {
- //重新组合图片并调整大小
1 }* v, `5 w4 [( V1 R - /*; u2 B8 `0 ]$ w( j+ U/ k; o8 L: j. W
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中4 O5 e$ i! X. G2 A3 A2 V3 r
- */
2 l) d+ e! c4 W2 h' x, L3 p - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
8 q9 ~5 M; O6 U! f" R. E - }3 z% `% `# K; {+ d+ S
- //输出图片0 w2 t: o) _) P0 H- }8 ^- K
- imagepng($QR, 'qrcode.png');
4 T Z5 d5 e) S. @2 o - imagedestroy($QR);* f v1 ~. C e- D
- imagedestroy($logo);5 \9 H" g1 G* L! i0 r1 r$ \
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
( u1 N4 N, K' S - }( d3 A' X& `3 g" k
- //调用查看结果" x+ T& }' y4 N/ B3 }* N0 O$ t
- echo scerweima1('https://www.baidu.com');5 L! f' G; m* O* E+ H
复制代码 3. 生成二维码(不生成图片文件)) J7 L* A4 R& v0 H4 M, v
- //3. 生成原始的二维码(不生成图片文件)
: v- l8 O) d5 ]" ^0 E - function scerweima2($url=''){
3 k7 c3 E1 z' H9 @ - require_once 'phpqrcode.php';
! U2 L5 f2 o) @( e - $value = $url; //二维码内容# }4 j! [ r# t. D( ~0 Q w. f9 A
- $errorCorrectionLevel = 'L'; //容错级别' _) D" B) P# T+ M: Q# ^8 H
- $matrixPointSize = 5; //生成图片大小) X4 x+ M/ M n3 I
- //生成二维码图片" \5 n" e3 V- S( W. @
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
& f, ^3 v% J* t: U' u - }1 g9 T; M1 X6 g6 {8 _
- //调用查看结果5 R! N! E: V! c. ?% c: v( C
- scerweima2('https://www.baidu.com');
5 V9 I$ x% C% x& C
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
' \) {) ?( {0 f% o2 UPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
/ f; D- _! Q, C E# ]在线生成二维码工具(加强版)+ ~$ E( g w0 f: k+ A6 D3 u. W
http://tools.jb51.net/transcoding/jb51qrcode
4 ~/ ]6 C0 v+ K在线二维码解码识别工具
9 _4 [1 A Q% m3 T: _http://tools.jb51.net/transcoding/trans_qrcode
+ M/ K1 ]' A8 d- M% x
, }3 Y+ a1 _7 m
# q3 H% M9 q! Y
1 _$ m4 e& X9 |2 \; A* u3 i' \# ] R, l3 |
; C8 N( {; m, p7 l/ ?
|