管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 U1 n' O! C+ r8 H1 K% \: p
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
. r# \4 K( r* `, k- b3 {4 [+ n前期准备:
2 ]4 q3 [7 {9 e& D1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
/ `9 A( T6 r/ ^, }+ j) t 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
% d) J5 V n; m) Q7 w方法解读:
6 ^, T' o! x9 q+ Y0 y w0 B下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
3 W2 E* _ N1 w% g( C$ B' m+ l+ o4 {- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
+ B' j( s/ V- q% ]7 o4 a. X' T - {% \8 B5 T Y, m- `0 ?
- $enc = QRencode::factory($level, $size, $margin);5 c. [* N: k6 s+ M5 w3 U
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
8 L8 V7 w; Y4 D - }( x" l h+ N4 I, ~) `$ L
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;' }/ w/ Y2 i4 P8 [4 K
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;2 ]: r, [4 ^+ b1 E& t g. L
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
6 \3 w, ^/ h- P+ N 第4个参数$size:控制生成图片的大小,默认为4;
7 _" b% S8 M' Q1 B3 i, P% x 第5个参数$margin:控制生成二维码的空白区域大小;2 X+ t1 I% `- O+ q. K* x
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
; f4 N' S1 c; p( m% I `使用示例:
' N. b0 B. z: ]& q) ?+ m( R5 f1 G1. 生成二维码(生成图片文件)
, I- e, @9 B7 a( Q1 V7 l2 m- // 1. 生成原始的二维码(生成图片文件)$ ?4 D1 c% l% y) l6 h8 V, s1 h
- function scerweima($url=''){. Q1 |3 } K. D6 T9 j6 @3 X% c
- require_once 'phpqrcode.php';
0 b7 S u0 V# T4 W3 R - $value = $url; //二维码内容3 {) ?; l" I( G2 w% m/ W; v' W2 S& P
- $errorCorrectionLevel = 'L'; //容错级别
3 y" q" [) ]8 @9 K' ^ - $matrixPointSize = 5; //生成图片大小8 r+ k) V+ u+ l) @) @) |5 }6 I
- //生成二维码图片 W" c" ^* u8 Y% \' S+ n' e
- $filename = 'qrcode/'.microtime().'.png';; M! _% F$ }' R$ T8 g. B' M9 y t% U9 r
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);7 X6 ^' C9 B7 ~; J2 N0 _
- $QR = $filename; //已经生成的原始二维码图片文件
) M! I) U$ t& r% f - $QR = imagecreatefromstring(file_get_contents($QR));- f% M! ^& i: s- @6 E
- //输出图片2 H; _1 _; p% o% e5 Z
- imagepng($QR, 'qrcode.png');. B" j8 H1 V* D& U8 d' {
- imagedestroy($QR);* ~& J3 z0 [; b- X# e1 C9 X2 F
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
/ X- B& M1 U" Y" W6 s& u5 j - }* b$ c+ Q8 U: Q& ]9 i
- //调用查看结果: d6 ^0 [- E% u# a! y) i# q# b- i
- echo scerweima('https://www.baidu.com');
2 b6 g# q. H+ b6 L
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
' V7 q- J8 ]: G( k- //2. 在生成的二维码中加上logo(生成图片文件)
$ }- X" ]2 E8 r# V6 x1 t - function scerweima1($url=''){: c5 \ a& J& `
- require_once 'phpqrcode.php';
0 M0 `9 e/ }! \" f7 l' M- k% A, t - $value = $url; //二维码内容7 n) |7 }, O- ?
- $errorCorrectionLevel = 'H'; //容错级别7 M8 X4 H5 Q5 k$ L/ m1 K- [
- $matrixPointSize = 6; //生成图片大小0 J) e3 F% Z9 ~, C, K$ E t
- //生成二维码图片
: h3 f0 K. ~; R - $filename = 'qrcode/'.microtime().'.png';
6 R7 x$ k2 {: {# n - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
& F) R! c( ]" d' } - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
2 d. L! M5 W |+ l. {8 p - $QR = $filename; //已经生成的原始二维码图/ C( m* j' B* _+ @
- if (file_exists($logo)) {
( v* x! t' u2 O# M z3 L3 p - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
, F2 U" Q8 ^" V- q! i* g - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。+ H, A4 }# P1 o7 H3 z8 t; r" P6 \7 z
- $QR_width = imagesx($QR); //二维码图片宽度$ E8 O/ v4 J c6 ]" W
- $QR_height = imagesy($QR); //二维码图片高度
J8 u' v7 P$ ^ - $logo_width = imagesx($logo); //logo图片宽度
' @- ^& d( w5 [% B1 `: }: S - $logo_height = imagesy($logo); //logo图片高度
/ W9 |" G" D8 U( ~ - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)4 @4 Q- ]) x: v3 ?
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
0 ?* E, \% a" B4 L0 T - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度9 [4 c% p" e; U; u5 }
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点% D% z; h9 Z# |2 W8 y5 n2 z
- //重新组合图片并调整大小
) ^5 k5 n: d7 f/ d0 }. N - /*# n+ X7 L( B6 w% ]8 x
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
; ]* X C5 z% V2 ?. k/ }7 c - */
9 |; W. q) O( Y: s3 c - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);$ D E5 J$ e! K
- }
0 A/ d7 I% u$ E: w - //输出图片' y3 |$ m3 C0 u# ]4 E, N; ^, o
- imagepng($QR, 'qrcode.png');
' B0 ], K e# {7 T) d1 w$ M - imagedestroy($QR);- N( s' }( p! H8 Z$ G& C
- imagedestroy($logo);% D ?6 {0 J% p* w
- return '<img src="qrcode.png" alt="使用微信扫描支付">';% g/ G+ e2 v& t9 p( U
- }: T, A# w& d; `2 H
- //调用查看结果5 `4 E! z" g1 i) X
- echo scerweima1('https://www.baidu.com');8 U0 S" |$ n. @4 P& o$ }: [
复制代码 3. 生成二维码(不生成图片文件)
) D1 ~. A6 N; u; b' O" p5 j$ N! J- //3. 生成原始的二维码(不生成图片文件)" C, S/ L5 S/ X6 v- E- Z9 ~
- function scerweima2($url=''){# ?6 W1 @: t. a, Q
- require_once 'phpqrcode.php';
( ^2 e; X; G ~% Z4 c; ~' y+ T- e - $value = $url; //二维码内容; D1 r1 h4 ~$ n- N9 ]$ W
- $errorCorrectionLevel = 'L'; //容错级别
& Y& c( g/ H6 `# m - $matrixPointSize = 5; //生成图片大小6 N( N7 p+ s8 W/ Z( F# ^
- //生成二维码图片( f& \. S7 q0 H* F
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);9 w9 u: j7 F, _' J& T, P
- }- |/ r+ M: h' P" F) J: ]) w
- //调用查看结果( b1 j8 b/ q; n/ R. c8 W$ q
- scerweima2('https://www.baidu.com');; {0 }$ [* P5 }! p1 X* Y
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
, j9 y# d+ [5 o+ B6 D @PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:- O7 [: m4 l; `" ~
在线生成二维码工具(加强版)5 Q6 u' A6 y+ `4 F+ z
http://tools.jb51.net/transcoding/jb51qrcode) h @6 H! \/ V/ \: z1 V4 c7 h
在线二维码解码识别工具
6 e0 O4 B) k/ d' J; h I% khttp://tools.jb51.net/transcoding/trans_qrcode
9 E3 [/ ], `' [# C
( {$ |& t; n. q$ n% C' C% `
, T) ^3 N# f; W( V& S
" ^% F- U; y- o- \. ^, X1 @# K
" @) A. S8 N2 v Z
|
|