管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:& M6 z a1 g P, z9 C) ^! i
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
& E: z; Y5 P# V+ X4 j+ l' J! ^8 ^前期准备:
6 P& q9 c0 n3 t, ?% [1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
+ n" W$ y* Q# O1 v* a2 F 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)6 G( L6 ~" f8 z& B1 a
方法解读:
6 Y8 F. l2 t2 S+ m: X J下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):- M6 I. w2 \; g5 z5 G+ m- C$ P: G
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 `. c$ d ^7 U( F+ l( l
- {
3 \' y t( [& k$ b5 D- y+ E - $enc = QRencode::factory($level, $size, $margin);
) O$ N b$ |; r# p - return $enc->encodePNG($text, $outfile, $saveandprint=false);2 ?4 M: Z# X2 G. ]
- }
0 C2 V' q- e! ?: X, W
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
+ l$ |$ i' I4 h7 m) T8 U 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;/ h9 T2 K$ `& u9 Y n: p
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
- `# A+ a. J' S" h. P% b 第4个参数$size:控制生成图片的大小,默认为4;
, m7 O! k3 a. g5 ]5 o& k 第5个参数$margin:控制生成二维码的空白区域大小;% _# ~* G/ z" S: y- [. s# Y' J7 X
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;% w; U9 }; E2 m6 z0 d
使用示例:
( G# m- ^2 ]; ]8 ]+ h1. 生成二维码(生成图片文件)" N8 `# P7 k8 \; F7 k
- // 1. 生成原始的二维码(生成图片文件), {& J t2 `6 i0 C6 U
- function scerweima($url=''){& V4 }: C8 x& [0 n0 \2 f4 g# Y5 d
- require_once 'phpqrcode.php';
# k( v. |; s* O+ ` - $value = $url; //二维码内容; T: K, l* ^: p* i3 J! D& C
- $errorCorrectionLevel = 'L'; //容错级别
. |5 N8 T3 m$ l9 k3 C- ]7 J% } - $matrixPointSize = 5; //生成图片大小
- J/ @7 @, W8 G( b& B6 R - //生成二维码图片9 y; a1 O! X# d Z
- $filename = 'qrcode/'.microtime().'.png'; P/ Q, j4 U. u# K
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);+ B1 j5 g4 S, ~
- $QR = $filename; //已经生成的原始二维码图片文件
* q8 n t% t3 o8 v. [& a( e - $QR = imagecreatefromstring(file_get_contents($QR));
0 t e, y$ \# D - //输出图片
5 b- H( N" H6 \+ b1 E! Q; ]# C' h - imagepng($QR, 'qrcode.png');) @( q1 K4 i, I1 s. u8 v3 F
- imagedestroy($QR);- ^# y9 q: w' B! V% u
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
/ P; l( B, e% R+ @ x* V - }5 r# n; o2 J" p6 w5 ]6 [
- //调用查看结果
6 S& R7 v. j" k8 S" j8 a# `- Z3 D; d( N - echo scerweima('https://www.baidu.com');
; j# {( T9 P& I3 I% o
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
[& s& I4 ?% w- W1 N) r- //2. 在生成的二维码中加上logo(生成图片文件)
1 S0 k2 i2 G* U8 T - function scerweima1($url=''){' J% U# F+ |5 L E
- require_once 'phpqrcode.php';9 r0 \) y" [. M! m
- $value = $url; //二维码内容
% z0 p/ s4 V) @( g! m - $errorCorrectionLevel = 'H'; //容错级别
8 ?# ]1 A% E" j7 l4 q( |/ k0 B - $matrixPointSize = 6; //生成图片大小& |( `) F e! x7 b. g* t3 D
- //生成二维码图片* F: f: I1 J: i/ _7 f
- $filename = 'qrcode/'.microtime().'.png';4 b* a' R$ e2 q) O
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
& f6 n( V2 c( I5 K$ I+ T - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
4 S& K8 t e8 r7 d S - $QR = $filename; //已经生成的原始二维码图, P/ X& L- [7 F& @
- if (file_exists($logo)) {- n) U, n- w5 f/ E- W
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。* W; S" ?- e8 S) x) P, ]
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
. a; `% ~0 b/ |3 J( p - $QR_width = imagesx($QR); //二维码图片宽度 \* @$ u/ V: G$ P, }
- $QR_height = imagesy($QR); //二维码图片高度
) r/ g3 B: O8 M4 \% K; p - $logo_width = imagesx($logo); //logo图片宽度+ \" y# r. G1 T& u) S' T. u
- $logo_height = imagesy($logo); //logo图片高度 k1 D$ x% ?4 l% v
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
( ~ E1 s5 O4 o1 O( p. w y: z - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
+ v) o9 A1 k: A - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度; Y5 g8 b1 W' ]6 |" s/ Z: n/ ?# D
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
' n& r2 p+ F# b" U* X$ Z# ~ - //重新组合图片并调整大小
; v/ v; W5 ~, a2 B - /*: ~! e: o0 O9 |
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
$ a* F8 f# o, A - */( Z# c# W1 I# _, F. s
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);; I! x% W" G( ~' G4 [
- }
, [, Y0 C9 x; i. W' ]4 Y - //输出图片
# M& T9 v) Y% Q - imagepng($QR, 'qrcode.png');
3 Z9 C2 c8 p# X& U0 y% N: C% ?4 k - imagedestroy($QR);( p, G" V! S4 D4 U7 |
- imagedestroy($logo);
. ]6 |4 Q& q6 ?5 s: g, E - return '<img src="qrcode.png" alt="使用微信扫描支付">';
- R7 I8 A* }( ~& D. Z3 Z - }
! J- w0 x7 c' Y/ [ A3 J - //调用查看结果
; _" V& q- A: d# p7 x' \: @ - echo scerweima1('https://www.baidu.com');5 J+ t" f6 W3 N4 V
复制代码 3. 生成二维码(不生成图片文件)4 k$ A) c/ I/ x+ w
- //3. 生成原始的二维码(不生成图片文件)
2 O/ S! W7 l. ]: W - function scerweima2($url=''){0 L* n* K/ \! q0 @
- require_once 'phpqrcode.php';6 I6 T9 {, Z/ T8 m" L/ I* l
- $value = $url; //二维码内容
2 j6 o, }- k: N6 ?$ { - $errorCorrectionLevel = 'L'; //容错级别& Z' N% {" T( {
- $matrixPointSize = 5; //生成图片大小+ U( ?0 @( {7 p! i, }7 G; C, n9 e
- //生成二维码图片 b3 h" x# G+ N; z. k5 T Y6 ?8 f
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);# ^" X) u8 D( _# E6 v
- }
" A5 U/ i# S Y: a5 i - //调用查看结果
. ] k5 h; b" R# {0 y0 L - scerweima2('https://www.baidu.com');
- L0 n3 P5 d6 v) }6 }
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
. c) \; T+ W# |/ d) a2 dPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 k- S: j; G0 j8 W8 a在线生成二维码工具(加强版): }7 S) `$ i8 Y( c+ A
http://tools.jb51.net/transcoding/jb51qrcode3 w( T2 x4 {$ d
在线二维码解码识别工具
" d: @0 o8 y! e2 yhttp://tools.jb51.net/transcoding/trans_qrcode8 ~; N, A3 t6 V
5 z, u4 }3 }( A$ U
% ?# ?+ L1 ?1 [& b0 Z3 G$ i& p) B5 g4 j
' v# W& Y& `2 ~" G6 \- s
2 _2 c! l7 n7 H( j. c5 Y5 M. \/ H3 m3 ^" F
|
|