管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 X* W) T" w* L3 O w5 ^1 S- r
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。+ C+ K6 I# A. [/ F
前期准备:
3 K5 v$ C- D" v3 P# C$ H1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/! O+ B( R+ F, \8 n T' }: E- R+ k$ T
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)( @2 I* }: {4 l [( _. D0 ?
方法解读:3 e' ~) _, W# K% J8 \* O
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):% [/ X8 _7 O% P$ A
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
- x( I* [) g5 S! U, } - {
) @: B8 H' }# [# t/ U - $enc = QRencode::factory($level, $size, $margin);
9 C& z4 z5 N; b9 v' N. @! Z$ p - return $enc->encodePNG($text, $outfile, $saveandprint=false);
7 Z3 m+ W9 P3 {# A8 o - }
4 r4 _4 N4 r$ w1 p' ?+ \- r
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;# w2 T$ T% v- f) ?5 ?. M
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
1 b6 S- u/ P$ e' R 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
3 ]: C; \ ], R: k9 [/ r" n% r 第4个参数$size:控制生成图片的大小,默认为4;; L8 ~% z9 B+ ~# S
第5个参数$margin:控制生成二维码的空白区域大小;
. S$ I( g2 U) i Z! w, s6 `8 d 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;8 r0 B4 |) ~$ z1 Z5 C% m7 ^
使用示例:; V% M. v* d$ v/ L
1. 生成二维码(生成图片文件)+ d, S: N% Y7 s( I0 k6 P
- // 1. 生成原始的二维码(生成图片文件). p+ t2 v& O7 o
- function scerweima($url=''){, C& E0 B9 ?" Z# L* M3 N+ Y
- require_once 'phpqrcode.php';
7 E q; r- `$ ~8 c: i9 h - $value = $url; //二维码内容
& `* `+ B7 I! l) k8 J C3 A- J - $errorCorrectionLevel = 'L'; //容错级别
% a# R5 @: U' w/ q! j& C - $matrixPointSize = 5; //生成图片大小* Y, u' z$ g0 f0 R0 p
- //生成二维码图片; W' n/ e) L" y/ S
- $filename = 'qrcode/'.microtime().'.png';! A/ j* H1 R: o6 T h
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2); Q3 r* `2 O" A; C) W: \* P) J9 {
- $QR = $filename; //已经生成的原始二维码图片文件
% D1 p2 H5 |( V8 x- L; `9 d% Z - $QR = imagecreatefromstring(file_get_contents($QR));5 B, n8 K: n& n4 o5 U- _7 P1 k
- //输出图片' y5 k* n. Z2 ~
- imagepng($QR, 'qrcode.png');
# {1 |6 ]" c3 n4 Z# U( n/ U8 f - imagedestroy($QR);
$ Y" W$ B8 I: q& ? \ - return '<img src="qrcode.png" alt="使用微信扫描支付">';
/ i& m ]& u. \ - }' o0 w, Y% V7 l+ A* r* s8 O6 Y
- //调用查看结果! r( L6 _ ^; a- {
- echo scerweima('https://www.baidu.com');( u, n$ f+ S- Y
复制代码 2. 在生成的二维码中加上logo(生成图片文件)- _4 F) k1 U. P
- //2. 在生成的二维码中加上logo(生成图片文件)
5 v) l$ K# c) T% G! R4 L" {# y - function scerweima1($url=''){
2 h) e2 ?# f4 F( N2 F1 T c$ D3 U - require_once 'phpqrcode.php';( x' L! ]5 R+ f" N* c
- $value = $url; //二维码内容
; s, m, B' j' [2 J) L4 j - $errorCorrectionLevel = 'H'; //容错级别
' Z- ]1 Z5 r8 R+ H. r* f2 Q - $matrixPointSize = 6; //生成图片大小
# |6 K q/ j! c% S* F2 f9 X - //生成二维码图片1 s* w" J6 l- I$ q6 T1 \: w, ~
- $filename = 'qrcode/'.microtime().'.png';
# e/ a: o. E2 h5 I# J: f9 K' R - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);/ A* w+ i4 Y% V0 e1 h
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片0 H( W! A+ f6 X6 u7 R
- $QR = $filename; //已经生成的原始二维码图
5 p* q; v: |3 G! @/ E; g7 k - if (file_exists($logo)) {$ m8 C5 x3 m* E6 w
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。; r" }3 Y. }' _$ d7 b* T' r
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。6 m, b, l* V3 |( R
- $QR_width = imagesx($QR); //二维码图片宽度
& {0 k; s/ h! q - $QR_height = imagesy($QR); //二维码图片高度
7 g/ Y1 V/ ^/ n9 d g - $logo_width = imagesx($logo); //logo图片宽度8 l% C. k, n$ T- ^( ]
- $logo_height = imagesy($logo); //logo图片高度0 ^) B0 i1 d) s( t6 L6 O3 h" Z
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5), ~7 e3 H, {& V+ Z2 Q) L2 m
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
$ V. \# t7 W) z - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
( {3 V6 ~) d# }' p$ n6 Q: j - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点& }/ l1 i) ^+ k6 K u; z1 A
- //重新组合图片并调整大小
* D+ Q+ h6 h1 Z2 X9 L- T9 X @ - /*
' I6 {; W% A4 k" i) ]$ I - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中9 P. J O7 f; G! X) U; f9 P
- */
; p3 S3 d5 n) m' U: P5 S - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
1 E* p. M1 V9 R2 V3 d2 w2 x8 p - }
c( E( j: O% X; j& c. s* ? - //输出图片
) O% ?# j, e" g1 U - imagepng($QR, 'qrcode.png');1 n, ?1 v; w; ^2 X: u& @, u* m
- imagedestroy($QR);1 @& M* c _$ \5 `7 s
- imagedestroy($logo);
9 b5 k* B! k1 y9 s4 ?* G - return '<img src="qrcode.png" alt="使用微信扫描支付">';
- |$ \* S1 B5 r; D, X+ u+ e5 ?3 A - }
9 f( d# V0 ?: ~& F5 k1 E - //调用查看结果
" k: N' Q8 |' O2 M& o - echo scerweima1('https://www.baidu.com');
h7 r1 G( y5 h5 b
复制代码 3. 生成二维码(不生成图片文件)
8 E3 ]' R: k, U& y- O+ \- //3. 生成原始的二维码(不生成图片文件)
& S" I; V2 ]0 p - function scerweima2($url=''){% ^1 n" [& e' @- P2 u. y
- require_once 'phpqrcode.php';; x/ s" O6 J% A# h; E1 q
- $value = $url; //二维码内容7 J0 r* n9 Z% T/ r1 w5 y* V2 A
- $errorCorrectionLevel = 'L'; //容错级别
4 V) x" m# m9 N/ S p - $matrixPointSize = 5; //生成图片大小; B% E8 \6 C+ F# I! F& i7 }/ P2 i
- //生成二维码图片2 G# Q8 e- _, z
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);+ v) Y% T+ [3 G: P' U0 t1 Z7 J
- }+ }1 H) }; [2 s5 Z; k% ]* L
- //调用查看结果
& ]/ B; {# Q- m/ v - scerweima2('https://www.baidu.com');2 P7 H J' z9 f. T
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。 A" P6 k: Q+ ]
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
6 k; n$ M: I$ T! M- {* |2 F# q' P在线生成二维码工具(加强版)
# j. R& m. ^5 D( G- C* R4 }- chttp://tools.jb51.net/transcoding/jb51qrcode
' O% }- c' m4 f! d' i0 x5 H3 ~在线二维码解码识别工具# W3 D$ g6 f9 P- C5 ]
http://tools.jb51.net/transcoding/trans_qrcode8 s1 O. f2 d8 m) m, ?& L
2 @6 x) k! U3 B( b% D1 J
6 m' i( T2 l* @7 K
9 ?& G) X9 b6 d
3 d% R% `! U2 M, z z5 p% a6 Z ?% E' Y# C0 e* q5 O, H
|
|