管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
3 Y6 { f! R9 D# l" ~5 h* a; \ ^使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。3 u% x0 m* e5 g* h& t$ ^4 S/ m1 g
前期准备:/ Q: A/ g! B; O4 O& k( l0 ]
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/- ]1 R5 M4 P U/ o4 ^2 Q
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
1 j+ L9 K% C* ^4 } ~- a$ z方法解读:: i. Q" f8 x$ @$ q. o- M
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):" n! [5 ~6 _0 X3 j* _
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
) |9 L9 g& v* U& }* }% v. J: f - {" B! f7 r6 ]& h2 L5 Y# o( G
- $enc = QRencode::factory($level, $size, $margin);* j: c9 L2 y1 a: {2 i' h
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
x. v5 z- ~8 a - }- V& z6 F; B _4 |" ]' o: c) l
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
7 N/ b/ q. z2 Q( l 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;8 K e1 Z) d i9 J+ o
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" Y8 o; E' i. A% e0 m3 M
第4个参数$size:控制生成图片的大小,默认为4;
+ R) @6 [/ ^7 A( e2 f2 [2 l2 l 第5个参数$margin:控制生成二维码的空白区域大小;
; S9 D6 u( p# s* _: k% E 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;6 q; T+ i0 S! t. S; R0 _
使用示例:
/ h6 G% h2 p: V# |: t1. 生成二维码(生成图片文件)' L* a# k5 ]: v+ z5 {
- // 1. 生成原始的二维码(生成图片文件)1 x2 {/ M% p* U/ F& _$ w" O
- function scerweima($url=''){. R) b2 D1 b2 q* v$ I
- require_once 'phpqrcode.php';+ D0 k; J$ R3 ^( ^" E4 ?: |; S
- $value = $url; //二维码内容
/ [* }8 C2 B" w3 T - $errorCorrectionLevel = 'L'; //容错级别' }6 i/ p/ p/ |& x( ~
- $matrixPointSize = 5; //生成图片大小4 g7 V" Z# q/ M( E/ h' l- {. z" z+ L
- //生成二维码图片
# S+ C* R4 i( L2 P/ S - $filename = 'qrcode/'.microtime().'.png';
! W9 K6 S' F8 |, u - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
0 \. R: F' H+ @* z7 p7 F - $QR = $filename; //已经生成的原始二维码图片文件0 U e# z7 w' x3 {9 Q
- $QR = imagecreatefromstring(file_get_contents($QR));
) M# d0 O' u/ t. \7 F* D! | - //输出图片
- p8 R, N) ~; J( f" ^& C) G4 Q - imagepng($QR, 'qrcode.png');" I2 B/ ], V/ O9 f! ]
- imagedestroy($QR);9 {/ D3 p: G j, \* i+ A; |7 E+ p
- return '<img src="qrcode.png" alt="使用微信扫描支付">';$ s6 j& P6 y |" P
- }
6 h/ N: f }2 s% @' N* R - //调用查看结果+ W+ N. h0 p9 I& }% @% p
- echo scerweima('https://www.baidu.com');
6 P9 z- R- D0 N- d I* Y8 j
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
/ ^" r! ]7 \8 o4 y7 p% B% ~& S- //2. 在生成的二维码中加上logo(生成图片文件)
0 p. g4 ]0 J4 }; b9 S) O7 T5 ^ - function scerweima1($url=''){6 d6 F% L' x' ?
- require_once 'phpqrcode.php';! m7 s& }3 J+ J1 S1 M$ t' Z
- $value = $url; //二维码内容# U" Q( `% x# B
- $errorCorrectionLevel = 'H'; //容错级别
. L( ]7 p% {8 r+ h7 }" t! t% F7 | - $matrixPointSize = 6; //生成图片大小
! _9 T6 _* D) M* X7 ~" o - //生成二维码图片
, D9 D5 X" ?6 X. h o9 d! U+ }4 x - $filename = 'qrcode/'.microtime().'.png';6 Y' K( s( }& B1 b" b( n, R
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" T/ V3 ^) m2 H7 @3 o
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片2 c& M# b% s+ I: Q& b' M
- $QR = $filename; //已经生成的原始二维码图4 F( w o. L+ k1 j) w% R. Z. [4 m
- if (file_exists($logo)) {# m! [7 ?% Q# Q S3 [
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。% \# E: o9 F# H/ Y3 _, K
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
4 M9 V) x* h2 _8 Q; E - $QR_width = imagesx($QR); //二维码图片宽度( T1 ]9 \" s3 ~# e: t+ @
- $QR_height = imagesy($QR); //二维码图片高度
0 V( b: L2 X% E+ E7 z# G1 {% @ - $logo_width = imagesx($logo); //logo图片宽度
$ `6 l+ C _+ D' M4 v - $logo_height = imagesy($logo); //logo图片高度
q" V, Z# b0 ^; p) z - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5) \1 l3 j; l; x
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)# g' d# V0 r+ l
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度/ I3 X8 K- a& Q+ F
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点+ ?" y: N/ u `6 v9 @
- //重新组合图片并调整大小5 U M( K) j# J% i4 e
- /** S' n" b( F1 O/ R# x
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
2 m, e6 w0 a: z+ r9 C: a5 N - */
' F7 R2 E# w9 c$ w% `0 K: r8 o - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
! D$ ]/ [) \" @0 e1 U3 J! i. W; M - }
! q8 Q7 E0 T9 ~4 Y8 U$ S3 [ - //输出图片
; d5 W2 `0 \/ V - imagepng($QR, 'qrcode.png');* K$ y: n4 P4 K8 M! x' B
- imagedestroy($QR);
8 N" _$ H8 [ |# ^! g6 C! R5 P - imagedestroy($logo);9 r; V. z" b5 ^- U4 a0 x( { v* H
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
& e: A7 e5 \% Q k - }
( n% f2 T1 k) b5 M( w7 p* O - //调用查看结果
# S, B+ _2 ~& G; U3 x: v - echo scerweima1('https://www.baidu.com');( u; W# [7 A8 p( Z) W7 P) z
复制代码 3. 生成二维码(不生成图片文件)4 E3 P! }% f" w" t) y
- //3. 生成原始的二维码(不生成图片文件): G. J9 O v) v- X7 T
- function scerweima2($url=''){
- t1 i b- N8 c# b& a - require_once 'phpqrcode.php';2 j% k2 t7 W4 V
- $value = $url; //二维码内容
# U1 ]" B0 t, M( r5 L& p$ S/ I7 j - $errorCorrectionLevel = 'L'; //容错级别
9 g7 F6 D. b9 U, ? - $matrixPointSize = 5; //生成图片大小' o' }" ]6 K9 T& a. _7 P: ^
- //生成二维码图片
& x# B0 v" L1 K$ B2 K1 j* ]1 f/ Q, Q( m - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
; [9 V1 o5 a e* }+ x# w - }
* {6 r1 @: {1 Y2 T8 \; L4 P x- F - //调用查看结果
: L0 T& B! h8 V# D1 {0 G2 A2 |1 i - scerweima2('https://www.baidu.com');
6 v- C0 }, R7 d( _9 H0 R8 [
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
0 G. I; D9 S1 C/ CPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:! P9 D' y* i4 ]( c/ ^
在线生成二维码工具(加强版)! e2 s. Z0 X. g$ U6 O+ S- m
http://tools.jb51.net/transcoding/jb51qrcode* O1 U. R/ h( r0 Q) ?
在线二维码解码识别工具" `. v Z2 @/ u! J+ C: G, E: I5 ~
http://tools.jb51.net/transcoding/trans_qrcode
4 K- a! ?2 i: J
. s: g5 o( ^7 D+ k9 N& n0 P8 y+ z& p6 L+ ]* v! R0 E, K9 w
0 |6 b6 L0 \ A
6 N( c$ v: z! x
7 {3 H* u, o' J- y |
|