管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
% Y- T6 s1 O, k" f3 N使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
$ K( I2 O0 s, a2 O' ~1 x6 D+ C前期准备:. }( v/ R1 t' |. D, l7 P" ^% t [; Y
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/; d0 d- _: h9 g9 u3 y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
& |' A! N$ ]3 P: `) n方法解读:
1 E% w# p& L5 F8 `- Q2 ]! W* i, e. B下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):* t5 v( r0 Z$ z: F+ N
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
: Y& y2 l4 C$ X* J9 T4 R - {* y3 w1 k, {0 v
- $enc = QRencode::factory($level, $size, $margin);4 @- B, t* R' r" y7 i! N& V
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
6 [) G6 @1 C. S' A - }5 A( {- _& N, Z/ [
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;9 O5 v* v4 z& U* x( {
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
3 q |( n/ ]$ n" \ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;* ]% v+ b( p! y: M7 {+ o8 A
第4个参数$size:控制生成图片的大小,默认为4;
, O7 q8 |6 {( ?8 y 第5个参数$margin:控制生成二维码的空白区域大小;5 s8 j+ K m2 I% Y0 ?" w
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
; ? G/ z$ {* r% Z7 S% m使用示例:
* o) J* b) ?3 \- a1. 生成二维码(生成图片文件)
5 ]3 r$ C, w; g7 w- B- // 1. 生成原始的二维码(生成图片文件)2 O0 b. {9 D7 d$ w W
- function scerweima($url=''){$ J: `" ^2 G1 K
- require_once 'phpqrcode.php';9 t, L/ X: T& d/ _! @* O$ Q
- $value = $url; //二维码内容
# x, e3 [) J* M; d" P1 K/ j; k' e - $errorCorrectionLevel = 'L'; //容错级别
! b) U7 d7 w4 Y7 Y# v+ j& \0 H* X4 H5 w - $matrixPointSize = 5; //生成图片大小5 r7 g! r( Y) O4 q" V8 x$ h
- //生成二维码图片7 \/ _8 i& K$ _+ {( s! D
- $filename = 'qrcode/'.microtime().'.png';9 Z' t: z1 s# d- H* Z
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
6 X+ q9 O G0 c0 R3 v - $QR = $filename; //已经生成的原始二维码图片文件+ s' f2 v. X. [" Y2 t
- $QR = imagecreatefromstring(file_get_contents($QR));
; ]2 E8 v7 e$ C* j, M - //输出图片
5 I4 P* ~9 k6 D+ ^. t - imagepng($QR, 'qrcode.png');1 q6 I7 { o0 J, b9 P- ?
- imagedestroy($QR);4 q$ g- w) C4 M8 z% p7 R* q
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
0 R; v4 g0 O$ i8 ?+ n0 ?- g, j0 N - }* `! x+ o* x# ?( e
- //调用查看结果
- @( C4 O/ D x6 T0 t - echo scerweima('https://www.baidu.com');
& a. ]( b0 [3 @3 J9 q3 K/ Y" E
复制代码 2. 在生成的二维码中加上logo(生成图片文件); a& Z* J& ]) L! A! d4 Q3 e
- //2. 在生成的二维码中加上logo(生成图片文件)7 `) r( Y+ O, T9 s6 R Q/ ]
- function scerweima1($url=''){. x/ G' R! s L( k& V
- require_once 'phpqrcode.php';5 P6 @0 b l3 e! e' U3 S0 d$ {3 D+ A
- $value = $url; //二维码内容
6 c7 c/ D, V6 U# T( ^! l* F! w7 e - $errorCorrectionLevel = 'H'; //容错级别; [$ N2 a) M. O6 P0 h8 k+ l
- $matrixPointSize = 6; //生成图片大小" G1 Y$ @0 W1 ~" a K
- //生成二维码图片
( j2 n5 g; g6 B - $filename = 'qrcode/'.microtime().'.png';
* m* [( J p. R% a$ e, h% k, ~ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
7 o3 K7 q0 G3 g6 ]( j7 c - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
2 ]" f9 L6 [$ [% A3 N: ~. E - $QR = $filename; //已经生成的原始二维码图( S7 b; K, K" @
- if (file_exists($logo)) {
+ y" ~. W9 d/ ?; w. k - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
+ ]/ k7 Q0 U" Z( y4 ]8 U) s - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。+ X7 k2 k2 n# ~( {5 Y n
- $QR_width = imagesx($QR); //二维码图片宽度4 u3 a, F. k( X7 K5 j4 ~9 G; y/ P
- $QR_height = imagesy($QR); //二维码图片高度4 q7 N. \& h9 \& C/ r, q
- $logo_width = imagesx($logo); //logo图片宽度
3 k: s5 k! Z) u2 L+ W - $logo_height = imagesy($logo); //logo图片高度
# ^( C) ?2 Y+ ] - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
. i& X5 o; o' c' P/ o: s. c/ M - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
8 T$ u0 w8 r% s" V - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度, X8 q1 l O& \8 Z4 t9 P2 S
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
- {2 u- X! P$ v) h4 T. N8 c# c: Z - //重新组合图片并调整大小. f T/ E' I, q2 R* }
- /*
! l5 L$ k* d9 A - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
0 v( G* l8 u9 L* L) I2 A# e8 V - */* t. |8 E: U5 V' o4 e/ V
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);5 j- |( n5 P6 U4 x1 B
- }
: Z& g! P' w* _9 J! F - //输出图片4 y! f: `/ ^: l N
- imagepng($QR, 'qrcode.png');
) @+ ?2 O2 @' q( P, X9 q - imagedestroy($QR);( R* y2 H! j/ ] W4 Q
- imagedestroy($logo);
' h% A# ]) a, B7 Z - return '<img src="qrcode.png" alt="使用微信扫描支付">';
# X; Y7 E1 _* D) E( x - }0 ]# F) h( b+ q1 C: P
- //调用查看结果) H6 V) X& `! R
- echo scerweima1('https://www.baidu.com');
6 D! w8 s5 L _' A- _: \
复制代码 3. 生成二维码(不生成图片文件)+ ?6 X+ U7 p" F$ x& q* I
- //3. 生成原始的二维码(不生成图片文件) a% `/ y; J8 _8 W
- function scerweima2($url=''){
1 f p2 V3 Z/ A* x - require_once 'phpqrcode.php';' }2 R* x8 I$ h) o5 C, C
- $value = $url; //二维码内容
( C6 V: E% V4 {# [* O* v% Y W0 Y - $errorCorrectionLevel = 'L'; //容错级别
% ~0 g5 @+ o* l! { - $matrixPointSize = 5; //生成图片大小
8 B% {$ ~ [; o" F1 E: M - //生成二维码图片
5 _- [; |, j G# V$ Q& Z - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);4 M' T; A2 a3 P9 {" D/ i: @
- }
2 A# s. L$ M3 ?% o - //调用查看结果! L% u0 q4 d2 \
- scerweima2('https://www.baidu.com');( k- O& T6 ~% G" t5 R
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。* s) M7 C6 z5 Q8 ?% O, N1 A8 L) M
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ W* ?2 Q. Q$ }" {" y
在线生成二维码工具(加强版)
& _ b3 X3 _ S1 nhttp://tools.jb51.net/transcoding/jb51qrcode
4 N8 m) q: \% i- X5 K5 F在线二维码解码识别工具; e# Z- |1 V2 U: p7 d3 R) N3 W
http://tools.jb51.net/transcoding/trans_qrcode& l+ v% N- {* X/ h
( y I8 R: Z; {% ?3 o# p# q
% [# n) _# l2 B* J) G% S
. y- T* ?% l& R$ R' l
: f6 J5 l: K! z3 i0 B5 ^3 Z- N' B/ C5 n' P
|
|