管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:& A5 w+ B1 y6 L# w6 S. L% G3 v' D
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。2 |8 a" J9 j% z/ ~2 ~/ M$ _
前期准备:
2 ]& ^% u. k4 U9 d4 l4 ]0 N5 X# A1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. I" {4 W$ K: n8 k7 h- { 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)5 T3 C5 W9 n9 x$ K
方法解读:* I+ p9 x) V! N( f: c( v
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 H& Y: M& ?3 Y0 i2 N6 f- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 p1 C$ U4 F4 \6 X
- {
6 S) L. q5 }$ l, L* L6 T - $enc = QRencode::factory($level, $size, $margin);; {" ]8 }: B" b) W6 H1 _8 X, v: p
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
5 j3 s6 P7 m$ ]2 a! N+ ~ - }
7 ]1 J2 @8 P7 v2 L6 Q8 g3 L2 `% y
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;2 t* `+ h( z% ?8 C" C: ^( S
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
# g* r8 M- \7 c7 O2 W 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;7 h* w# z$ Z& J
第4个参数$size:控制生成图片的大小,默认为4;; z. ?1 u$ C/ _ }) j2 \+ I
第5个参数$margin:控制生成二维码的空白区域大小;
3 w; d9 l/ u4 V+ R( I& B M 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;7 n% x7 b7 k& u5 g n% `
使用示例:
% S3 s' q& X5 O- Y B1. 生成二维码(生成图片文件)
5 Q8 C5 t4 U! M2 h. e8 {- // 1. 生成原始的二维码(生成图片文件)
* d ^& m3 s/ Y: p# J* M$ p - function scerweima($url=''){% f; C. U! R& T/ T
- require_once 'phpqrcode.php';4 V- N; @ [( }# t6 b: J6 Q4 ?3 N
- $value = $url; //二维码内容( o% h; |; L% m! d3 I( x7 S# b
- $errorCorrectionLevel = 'L'; //容错级别
: G1 y2 H/ f ^7 ? - $matrixPointSize = 5; //生成图片大小
* b* Z6 l0 v- i5 X! V- ~ - //生成二维码图片
G$ m) Q. t9 f3 ]- j - $filename = 'qrcode/'.microtime().'.png';
' K5 Q1 H. G! n - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
) o) \! x# K% @, t% y - $QR = $filename; //已经生成的原始二维码图片文件
- b: ] O& o8 { - $QR = imagecreatefromstring(file_get_contents($QR));8 j- {% B4 {! W3 o
- //输出图片 [0 t6 M; j0 R7 b; H v7 B& P
- imagepng($QR, 'qrcode.png');
: f1 b' i6 f9 g - imagedestroy($QR);
8 B% P. f; Q. J- X4 B4 j - return '<img src="qrcode.png" alt="使用微信扫描支付">';3 t5 q& o% S3 e9 X
- }/ n; ~+ T/ F5 r$ C
- //调用查看结果
+ ^6 W6 Q K/ R5 O, f - echo scerweima('https://www.baidu.com');
" W# O3 v. i6 h( R5 x/ l4 d) }4 I7 T
复制代码 2. 在生成的二维码中加上logo(生成图片文件). W5 o9 s3 p- h! g+ `- q
- //2. 在生成的二维码中加上logo(生成图片文件)
2 Y* ^" C) [0 F4 m* r% a$ s - function scerweima1($url=''){
7 ~+ j$ V4 d$ K - require_once 'phpqrcode.php';$ a3 F% ]0 E4 F; u8 H7 E/ _) V, ^
- $value = $url; //二维码内容
& w0 }3 @. c. R, F& Q* x - $errorCorrectionLevel = 'H'; //容错级别! X, A- z" h4 a( {. ?
- $matrixPointSize = 6; //生成图片大小/ }0 [2 U; }4 q7 N, G
- //生成二维码图片
3 B2 v; t- @3 L [ `0 f3 u$ P8 y - $filename = 'qrcode/'.microtime().'.png';
0 Q+ m1 f4 L8 y: s, M5 @; c - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);7 C6 `0 u8 M9 b8 l8 D
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片& i: N2 w2 k7 Z# S
- $QR = $filename; //已经生成的原始二维码图: O2 [0 Y# P( U2 d9 y
- if (file_exists($logo)) {8 X) W4 w6 [. J% v) y# Y5 i R
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。# y) \% c Q! f
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。1 _7 L. E3 N K! G+ v: S& P
- $QR_width = imagesx($QR); //二维码图片宽度9 V$ _- t5 w! `7 C* J0 [
- $QR_height = imagesy($QR); //二维码图片高度
) C! l7 D7 |# l - $logo_width = imagesx($logo); //logo图片宽度, r$ @" ^" m2 |- s+ p
- $logo_height = imagesy($logo); //logo图片高度
" F; G2 Y4 L: B - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
" w5 ^" v% K% i& @# ? - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
% O* F9 b8 ?8 } - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
) f2 e ?4 y- y( f - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点8 A2 N$ s; c- P( X' o
- //重新组合图片并调整大小
1 f& H8 l, b9 l - /*1 l2 F0 i* ~# L, d; q7 D* W: a. f
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
* D* C8 w" {/ n% U, Y# v" s/ ~ - */
. M2 d( Z$ h2 l/ g3 Q* v- f - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
/ D+ y8 e6 \* n* D - }/ F1 h# G: U& }' J: N
- //输出图片
. z1 ^, x z d$ ?" w. f - imagepng($QR, 'qrcode.png');6 |; e v$ H# l$ j
- imagedestroy($QR);
+ H9 W" b7 K/ e; ^ - imagedestroy($logo);
" J( [4 J5 G/ p4 p, E - return '<img src="qrcode.png" alt="使用微信扫描支付">';1 v$ B8 c5 ^" h+ {( K
- }, q) X& e+ @* k# \5 j$ s2 j& U
- //调用查看结果
# `) ~' @2 ^$ k* x+ C - echo scerweima1('https://www.baidu.com');" c e: U- ]& A9 G, P/ w
复制代码 3. 生成二维码(不生成图片文件), A! `5 Z5 D c" s; x
- //3. 生成原始的二维码(不生成图片文件)6 k% b% I- B3 g, m/ @8 g. J
- function scerweima2($url=''){% ^: P% O- ]4 _) r r3 a" F
- require_once 'phpqrcode.php';+ ?, p9 a. g/ |) G3 K
- $value = $url; //二维码内容
5 A3 `5 i! y* Z! X - $errorCorrectionLevel = 'L'; //容错级别
1 j) y9 h& u0 F1 ~* b0 T" N! o - $matrixPointSize = 5; //生成图片大小
; W0 c% p' p; a! v7 h - //生成二维码图片
- k O2 b8 R7 y& [ - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);- g% G0 g. H6 L
- }
, D2 I7 X! O$ m j - //调用查看结果
: @9 A& \1 y3 a4 s; B9 X0 b, G/ R) E - scerweima2('https://www.baidu.com');
! l0 _% P1 o* e5 ~1 I) B' S1 X9 S7 ^
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( {! U0 g1 n1 s/ N1 D. c6 v, H9 { ?
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 }- }& m$ F- D在线生成二维码工具(加强版)$ ^" Q2 A8 c' ^. r7 I
http://tools.jb51.net/transcoding/jb51qrcode
3 B3 i6 O; C8 S# `4 f# y( w在线二维码解码识别工具
- N$ ^7 v' R' ^5 [" ihttp://tools.jb51.net/transcoding/trans_qrcode
5 j8 I) s2 {" a& W
( D' I7 G! G7 ~- N, ?4 o. _/ i6 F+ y
9 l# e- h- b: N4 O' A2 ^; u
, @5 u3 I6 u7 E2 ?/ z
* t/ ]# F9 m5 ?; D* q
|
|