管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:! h- N- [9 ~, m6 b4 j. H. u
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
) j w0 U. x( a5 @) A" B* c: c前期准备:
: L* I; ~" V3 ^' x! j, A1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ Y* H3 k. q' R+ Q" h/ M
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
/ r% U" H2 O, H2 I方法解读:
4 V% j1 q& r* R$ n) s下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):% F/ k: Q4 z# C% F3 j3 o& o
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)& k0 G" W; i& ]2 t% D/ k6 W
- {) W, O5 t1 Z7 A1 ~( B0 e
- $enc = QRencode::factory($level, $size, $margin);& S( O1 \7 C# p! b( P$ t! g+ z4 e
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
- ^0 X: n) B6 O/ ^/ Q3 T - }
: M- U$ b" b- W
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;' j! F' N- h$ `7 l4 J) |
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;% J5 o, p1 `+ P& J' D# M
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;* `1 J; V" ?8 e' G7 ~. @
第4个参数$size:控制生成图片的大小,默认为4;! D' Z* I2 [1 }# |4 o3 B8 N5 z
第5个参数$margin:控制生成二维码的空白区域大小;
- a k+ A5 A9 \5 Z 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;" e% O/ |+ y3 p# E* B+ Q
使用示例:: D" D% H# W: u1 y" m) i: d
1. 生成二维码(生成图片文件)! B* C9 R7 O" D1 F. }$ ^7 H( v: E
- // 1. 生成原始的二维码(生成图片文件)
& `( g( T0 R5 e - function scerweima($url=''){) a2 k/ a' V! G
- require_once 'phpqrcode.php';* e6 J6 A, _! b+ |" W: ~! _1 F& x
- $value = $url; //二维码内容
; c+ k! z9 b( u, }! v+ [ - $errorCorrectionLevel = 'L'; //容错级别' C) N5 L4 x$ c' U6 L' j# l& n
- $matrixPointSize = 5; //生成图片大小4 C6 s) d: G! n: h! B
- //生成二维码图片
+ Y1 f; n, {8 z. V. e0 p) q - $filename = 'qrcode/'.microtime().'.png';6 k' e# }1 ~( c: I
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
7 p I h. v, g3 f, Q+ c - $QR = $filename; //已经生成的原始二维码图片文件3 n# l& U3 @1 q, ^2 ^
- $QR = imagecreatefromstring(file_get_contents($QR));
0 L: r- U5 x8 _0 H) w2 _/ s - //输出图片# U8 [7 C8 D9 `
- imagepng($QR, 'qrcode.png');
" ]+ W: e; j D2 m) \$ k5 s - imagedestroy($QR);
& b7 K) T. K: ?. p' m0 i; l- Y& Z9 N2 H - return '<img src="qrcode.png" alt="使用微信扫描支付">';
9 v; R7 _, I. _" f" f. x5 _# m - }4 {- h+ \- S% c5 @" b
- //调用查看结果
+ V" u* u& c" V+ U; y! ] - echo scerweima('https://www.baidu.com');
9 J9 }% x* Y, o7 D1 y
复制代码 2. 在生成的二维码中加上logo(生成图片文件)+ E( Q- Z9 p0 B5 U, ?5 b
- //2. 在生成的二维码中加上logo(生成图片文件)2 U0 L* S9 j5 b8 m
- function scerweima1($url=''){
2 S7 [% V5 _# o7 S5 y# S5 w - require_once 'phpqrcode.php';; t e3 W' l5 Z5 [* i+ W
- $value = $url; //二维码内容
! ?+ X8 O( ^& Y2 r - $errorCorrectionLevel = 'H'; //容错级别
2 Q& H2 d8 ~ R8 | - $matrixPointSize = 6; //生成图片大小8 O' {: K- v7 m
- //生成二维码图片8 ]: w" m0 N9 L. P6 V
- $filename = 'qrcode/'.microtime().'.png';
2 U9 L" a3 v) F6 I8 ^- W, d - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 F4 a* h8 a' A: ? - $logo = 'qrcode/logo.jpg'; //准备好的logo图片# S# F( h l8 O: S& ?! Q* ~
- $QR = $filename; //已经生成的原始二维码图, @: j9 v% t6 a2 c9 T5 z" z( ]2 {
- if (file_exists($logo)) {. ] A( v, Q3 P3 r# \; b) e8 _
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。2 i$ @% b0 n. d, w
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
- A; v l7 s+ ~+ U# S# s3 ]( } - $QR_width = imagesx($QR); //二维码图片宽度" u. K, W# p5 ?( K
- $QR_height = imagesy($QR); //二维码图片高度6 ^6 x* b$ e1 y6 i
- $logo_width = imagesx($logo); //logo图片宽度( E2 R# D+ V1 g+ ^
- $logo_height = imagesy($logo); //logo图片高度 A: H Q# L2 T2 W1 [7 X4 i+ u
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5), y- H+ g* K* G& t+ ]1 ]
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
7 ]3 i: v) ]( b9 V. Q- O - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: k7 _8 n" ~, a# q \
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
8 M* o# p! G2 O - //重新组合图片并调整大小
+ `+ m @. e9 |4 Z( `8 u( a - /*
5 a; L1 P ~* k; O2 g - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
" n* B3 ~* P G$ }* Q) m6 I - */$ c# L2 B" s8 d$ s
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
4 c; ?0 d7 P- }6 F - }
2 j, G% K8 E+ I3 \ - //输出图片
9 q0 ]" S% i O) H$ d% C - imagepng($QR, 'qrcode.png');
( k$ i; L+ o9 `+ B2 I - imagedestroy($QR);
3 q0 ] X0 q# h9 C$ _9 z# @. @ - imagedestroy($logo);
5 N$ ~9 A+ C" K* ^$ g& A - return '<img src="qrcode.png" alt="使用微信扫描支付">';& o8 B _+ A% _& t5 D0 w
- }" n; |* @. V! X$ y, E
- //调用查看结果, R3 [- V j4 Z3 V/ U) E2 K
- echo scerweima1('https://www.baidu.com');
0 w5 V: I/ y6 f* j
复制代码 3. 生成二维码(不生成图片文件)
) C8 o# W6 n1 m1 X8 k/ S- //3. 生成原始的二维码(不生成图片文件)* F L8 W# E) z- v+ E
- function scerweima2($url=''){7 j! }9 q6 F+ w0 J2 h6 A4 i, H% {
- require_once 'phpqrcode.php';
) n3 }, Q( \. }9 Y8 f! A# o - $value = $url; //二维码内容! C. L, T# K* q
- $errorCorrectionLevel = 'L'; //容错级别" ]4 M) m+ K5 {& A) J* u6 S& k
- $matrixPointSize = 5; //生成图片大小( x" P0 Q6 t# G% E3 F/ O
- //生成二维码图片# y* ]% N% O, [0 Y6 {3 ^- H; w0 f
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);7 [% Q4 J+ L" h. K. T
- }+ |& O! `+ f/ g; v' F
- //调用查看结果5 A" g+ R: d2 b0 }# E; @9 z# a
- scerweima2('https://www.baidu.com');
. x* w0 ~$ Z1 Z
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。2 h6 z7 k* {2 e! B) H8 }" g
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
! Q7 l, Q! _, E% a在线生成二维码工具(加强版)4 i' T, s+ y1 s% {# F
http://tools.jb51.net/transcoding/jb51qrcode4 ^% r8 t2 C# A% n6 |3 g2 e
在线二维码解码识别工具2 a/ u3 F7 ]# l5 o1 g- V
http://tools.jb51.net/transcoding/trans_qrcode
0 J3 K6 {4 r' R& q3 z, F- m# @
3 j0 i* l* b0 W7 ]2 P M3 p9 f0 ^; ^
! _' X. X0 X# X$ P, x
+ f# v, b( ~! v3 X$ @% E( z- _- f% x) x4 C7 N, [
|
|