管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:' c# ^" C' u S% v# X& e8 I; U+ k4 S
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。0 K" f7 a. F. l6 R' }
前期准备:
$ `% y% v" j+ H& K4 z1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/; b% M" q7 L- M8 J: A, ^
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
7 T1 Y! v/ `- G2 l( m: p; F方法解读:
0 J+ `2 ]5 H3 q" n下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
5 h# [3 v, G0 q+ U% y2 I- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false). s% s0 \5 c, L7 j
- {: f, V) p! }4 w
- $enc = QRencode::factory($level, $size, $margin);
, K! [, q1 T# }% p9 W( [/ p$ I - return $enc->encodePNG($text, $outfile, $saveandprint=false);
* ?. _6 s. c' D - }; x7 R% O$ j. Z" R a
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;+ x6 B: F6 F* v, Y& Z. f4 N) O
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;8 ]# _7 R! s' m& B( X2 ]
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
, `% ?! o7 B' f4 B+ e 第4个参数$size:控制生成图片的大小,默认为4;4 O+ _! G4 r8 a9 N' `2 S
第5个参数$margin:控制生成二维码的空白区域大小;
: n* T; \9 v3 K u* F, G6 R 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
* e. Q) _6 H7 z# s8 ?8 Y/ @使用示例:4 k: o8 Q6 u& J+ O# u
1. 生成二维码(生成图片文件) C1 h$ M4 x0 F; n+ Z7 o8 `
- // 1. 生成原始的二维码(生成图片文件)
1 ^& ^$ w. H( J, q) O - function scerweima($url=''){+ A1 m6 K8 `) s
- require_once 'phpqrcode.php';# d( E8 h- o9 q
- $value = $url; //二维码内容
* A6 M! [ r+ q/ }, V* v( u - $errorCorrectionLevel = 'L'; //容错级别/ r" X$ _0 w [0 ^- G0 f# E
- $matrixPointSize = 5; //生成图片大小
. r5 I! H1 k9 }, x+ Z - //生成二维码图片6 p5 \8 `! P" h4 w1 Q) `
- $filename = 'qrcode/'.microtime().'.png';
/ U/ b1 U0 c3 v; q3 _: L+ z) ] - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
, J+ A- {8 I9 O! ]! U0 V0 t/ | - $QR = $filename; //已经生成的原始二维码图片文件
1 Y( E, ~: t% k9 ~: g - $QR = imagecreatefromstring(file_get_contents($QR));7 M" w3 @; \7 C+ R( q
- //输出图片6 [3 G0 G8 A4 J9 l
- imagepng($QR, 'qrcode.png');7 S0 \6 @3 T: }* E$ @
- imagedestroy($QR);- H5 i% Y4 K& h2 y5 W( S# b9 }$ k) h
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
' L7 b- V4 ^4 P - }( l0 K9 D3 r- B& @6 _+ D% Y2 Y% m
- //调用查看结果
. j; j% B' V6 K9 H - echo scerweima('https://www.baidu.com');
8 e4 D* h2 n+ V' ^) t3 x
复制代码 2. 在生成的二维码中加上logo(生成图片文件)5 j) @0 `* k* F0 p+ ]
- //2. 在生成的二维码中加上logo(生成图片文件), ~) Q& L; b7 D
- function scerweima1($url=''){
$ r1 o9 x/ |8 Z# Y( Y6 X% w - require_once 'phpqrcode.php';. i1 x2 G; \5 w X0 h* D. b
- $value = $url; //二维码内容8 ?( [; ]& G( { K; U9 I5 z6 j
- $errorCorrectionLevel = 'H'; //容错级别. t) p5 d# L1 d, A8 K
- $matrixPointSize = 6; //生成图片大小
# @0 d" X/ Z8 U1 F* ?8 r - //生成二维码图片
, A! U6 V0 w5 D - $filename = 'qrcode/'.microtime().'.png';$ A- i5 B& ^ A! a0 O
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);' s8 H+ ?2 _7 _ O% M0 q
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片3 [6 l% k# Y v5 O3 t
- $QR = $filename; //已经生成的原始二维码图
1 H, t* Y' z- z. Q0 |9 D- B6 M - if (file_exists($logo)) {
# G; g3 N I5 _6 f6 }) \ - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
3 p7 A a: b# m0 v _1 V7 q - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
# i8 a& {& E+ O) K z/ { - $QR_width = imagesx($QR); //二维码图片宽度
! y: r# B" U3 K6 t* H1 D5 m - $QR_height = imagesy($QR); //二维码图片高度# l- o1 E- J% g1 O2 n
- $logo_width = imagesx($logo); //logo图片宽度9 W- N" R/ z% s+ A+ u4 a; u9 y
- $logo_height = imagesy($logo); //logo图片高度
, E5 x# u+ t5 }! ] - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
3 m8 p% E* k. W - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
+ }9 U" s5 h! v+ f/ _ - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
# Q( R7 A2 S- I2 B; O" C - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
/ t! _6 N/ R6 Z8 t/ H+ B: S - //重新组合图片并调整大小7 t8 O$ ]3 g: f }$ p
- /* @ U. Y4 p# y7 k3 U6 A
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中$ l" k+ x+ n: s8 v
- */
/ w9 G2 N& y0 h- d0 f - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
* |" m3 G l; X - }
& s4 {7 {+ V% M$ |0 b& e - //输出图片
; A7 r, p. v# C, p - imagepng($QR, 'qrcode.png');
8 ?5 g! |2 X! g( n - imagedestroy($QR);
& b0 C7 E7 G- i) U' z - imagedestroy($logo);
# X- T. I. S& {3 d - return '<img src="qrcode.png" alt="使用微信扫描支付">';
8 L: y K& C! v [( ]9 s" Y - }) O6 }) C# Z) B
- //调用查看结果( y% m. t* B' V: a0 P
- echo scerweima1('https://www.baidu.com');
* _: ]% l% @7 `& U; i9 p
复制代码 3. 生成二维码(不生成图片文件)
3 C# U& ?* U* c" L* i$ {% s- //3. 生成原始的二维码(不生成图片文件)+ K6 v1 M d6 H% L4 \5 m
- function scerweima2($url=''){- D B, k7 P) ^
- require_once 'phpqrcode.php';
- T7 K& S8 V) U/ j - $value = $url; //二维码内容+ c. i1 A' b1 X& n6 \- r
- $errorCorrectionLevel = 'L'; //容错级别
) R4 T) y: a4 x; X - $matrixPointSize = 5; //生成图片大小
5 j7 @1 R0 h( x) Y3 B - //生成二维码图片, C" y* Y( Q) G; P) \( `
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
2 k& E$ T; V/ V. g0 Y - }
% S/ v& A; e/ a9 ~5 @ - //调用查看结果
% h7 q( ~! N% H - scerweima2('https://www.baidu.com');9 |; m6 f: j% Q4 L
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
* B2 S: f! R" d: aPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
) ?% z. B$ d5 W/ W% O+ Y& j在线生成二维码工具(加强版)4 H0 R# Y# _, F& X
http://tools.jb51.net/transcoding/jb51qrcode! L( d% Q+ _6 z/ k Y
在线二维码解码识别工具
; V1 x; H8 j! I( k( ?2 hhttp://tools.jb51.net/transcoding/trans_qrcode
! f2 T$ @) f* a; ^7 \
$ J0 }/ |% f* z, v' n
9 [6 L8 z6 E% W8 O
5 a7 o8 a! o7 P& W0 `
$ Z* I" H* s. e9 j* T: s# y! z
4 M% F) S; Q8 _ |
|