管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:. q0 M# V/ O) K6 b$ ]# O
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
# ?4 t3 ]/ x0 O前期准备:. |0 R8 A9 X- Z
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/3 J9 u8 \2 x: q1 H7 A4 J' k
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 l8 _: g# J1 b* R3 n
方法解读:
7 i. m6 r( s& T. h& ~3 C& N* n3 ?$ Z下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
% G+ k" Q% x9 ~& G- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
2 x# |; e- X" I - {2 x- w/ t7 w( x- h( H' {" h
- $enc = QRencode::factory($level, $size, $margin);( @' Y/ _5 H3 j$ r
- return $enc->encodePNG($text, $outfile, $saveandprint=false); {; a- K+ R- _; k( H; }( Q# m
- }
! l+ ?/ E' J2 [. z1 T* c, Q
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;0 o0 K; q5 P* N( C7 `
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
& j, x' ~; O6 z" z 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;& P1 S+ u* Z$ p' d
第4个参数$size:控制生成图片的大小,默认为4;
- Q2 Z) B) L' s9 c7 j, m 第5个参数$margin:控制生成二维码的空白区域大小;
2 z& x/ r6 c) @5 a, D 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;: i/ s [& `( e, J% y
使用示例:
+ f1 L% N2 ?0 v8 d2 ~# {# m1. 生成二维码(生成图片文件)
" P6 \1 D. P! {; A9 I- // 1. 生成原始的二维码(生成图片文件)
r" |6 e5 L | - function scerweima($url=''){
' Q$ u ~* m% O" H' G, d - require_once 'phpqrcode.php'; `8 Y0 D, p* U" p# C- [' d
- $value = $url; //二维码内容
; B) s2 R0 L5 c6 } - $errorCorrectionLevel = 'L'; //容错级别
$ r- r3 |) }1 J - $matrixPointSize = 5; //生成图片大小
) H5 ?! `0 H/ q; K7 w; q - //生成二维码图片
1 y f- [8 i5 b5 A. S. D" W* L- K$ m - $filename = 'qrcode/'.microtime().'.png';
8 a9 N0 ^$ Y/ [( m8 N2 Q1 _ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);4 e: @2 l& Z1 Y+ U' v
- $QR = $filename; //已经生成的原始二维码图片文件+ K0 e# t0 o& z6 I; F, W
- $QR = imagecreatefromstring(file_get_contents($QR));4 e, y8 y: m1 h' |* U
- //输出图片
( K9 Y& w) n" M7 N, o - imagepng($QR, 'qrcode.png');
* [9 M" M! t+ v8 Q - imagedestroy($QR);
" ]2 a! l S0 M. a! V i - return '<img src="qrcode.png" alt="使用微信扫描支付">';
8 K' M% S6 [. O5 W& ? - }
0 n0 s T: {- C1 | - //调用查看结果
7 O1 V" p, [3 g. i - echo scerweima('https://www.baidu.com');
J% v1 W8 j& n, ~8 l
复制代码 2. 在生成的二维码中加上logo(生成图片文件) j' u6 ~+ ~. s+ [- w
- //2. 在生成的二维码中加上logo(生成图片文件)6 B2 l- Y' j3 A! ~, k3 I7 }3 o
- function scerweima1($url=''){
; c% {+ q, J/ e- _2 C; o - require_once 'phpqrcode.php';
3 E$ l) k8 |$ S8 _; A% P: F, }- t. d1 g - $value = $url; //二维码内容+ ^& b$ o- V! i. P# E
- $errorCorrectionLevel = 'H'; //容错级别0 u, t' v/ p) u% @
- $matrixPointSize = 6; //生成图片大小
( M; W1 t& Z4 ^1 `+ y - //生成二维码图片
: d0 }8 E- c* K5 S7 _ - $filename = 'qrcode/'.microtime().'.png';% ?! v/ z. i8 K. M4 g
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);& G9 s2 s6 X% ?; k
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
2 ?2 H0 Q8 i2 } - $QR = $filename; //已经生成的原始二维码图
* n* X( Y* f) b; E. l0 T - if (file_exists($logo)) {9 p, I9 p# G9 V9 J8 ?" c4 G
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。. C; E6 ^( a/ Q- D" q4 e
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。- r: g% l6 }3 b' p
- $QR_width = imagesx($QR); //二维码图片宽度
9 n9 y1 N5 }3 }+ o% V; m6 F1 x - $QR_height = imagesy($QR); //二维码图片高度
, X! D; c: B) s! `+ w - $logo_width = imagesx($logo); //logo图片宽度; n/ o% ]4 q$ a7 S- @
- $logo_height = imagesy($logo); //logo图片高度6 I: {( G* |# ?" j0 ?$ t
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
( U6 G& Z! B' h- y7 Y: M - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)& v/ D% i0 y9 i
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
! \" Y2 w7 p1 M3 K4 d6 v+ O - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点; ]( ^! r+ q+ m4 ~. f \2 r
- //重新组合图片并调整大小 M C8 h* R: f/ }1 z2 [
- /*3 ^6 Z w( s# }8 ?$ W, @& d8 m
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
. s8 w" ]7 N1 k) Z, S& e* Q5 M - */
# Q6 }8 \3 {# K' v8 o' J - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);7 C. L1 D2 u# B$ R/ }1 H n" X
- }2 r: l' A" C- c) N. G& b( x
- //输出图片
& g0 |5 ? Q* @+ \/ W# ~ - imagepng($QR, 'qrcode.png');: C! e" D! j2 Z3 v) k/ T" G
- imagedestroy($QR);! ]& k1 s& n- Y) ?1 x! i$ W
- imagedestroy($logo);9 M" O4 F M2 [2 u* B0 a/ r& T
- return '<img src="qrcode.png" alt="使用微信扫描支付">';8 C9 D, E4 g- y, Q0 `; P
- }
. l$ ]4 k+ R! g4 `" H - //调用查看结果
: q& r9 {1 Z9 K/ l* _ - echo scerweima1('https://www.baidu.com');
: V8 A( S2 L- p! d
复制代码 3. 生成二维码(不生成图片文件)7 h, l M( S/ p" i5 `. w. I& K5 T
- //3. 生成原始的二维码(不生成图片文件); t6 |7 ~# G% A* |0 q
- function scerweima2($url=''){, Y2 w, [# D8 M x) X+ k6 Z9 M
- require_once 'phpqrcode.php';
6 F6 M4 D) V0 f; y" i* ?+ N; ? - $value = $url; //二维码内容- ^& Z" d( j' n' ~
- $errorCorrectionLevel = 'L'; //容错级别0 e% U' U4 Z; [, j: r! @2 f
- $matrixPointSize = 5; //生成图片大小0 ~) A3 J9 h1 y, ^; E; C" M
- //生成二维码图片
: `) U) I1 y+ e5 n7 K6 v - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
. `% K% h6 L0 B9 x7 I; w2 b' } - }
$ i2 ^$ G+ s1 l3 j- v4 U/ j; G' _; ? - //调用查看结果+ I2 c& V) z6 G/ Y0 z. b
- scerweima2('https://www.baidu.com');9 a' b% c0 p% H& K
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( f/ h y% ?+ }# c- |( [
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
( L4 w+ f" r; i% T: y# f4 W在线生成二维码工具(加强版)
( y( L7 }, ]# j* i1 y. d+ j7 hhttp://tools.jb51.net/transcoding/jb51qrcode
& x( t, u/ Y: C- r在线二维码解码识别工具
, |/ b5 s: F2 }5 |http://tools.jb51.net/transcoding/trans_qrcode
' i) {5 G0 X+ w \7 V: q- ?% X7 T- p; I/ v
+ X7 n+ c" Q) X
" ?9 _" z' b p7 p/ r6 R M$ r: G5 }
6 l/ s- z- R# X$ l" K* I+ y |
|