本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
6 z. `8 r2 a6 y3 Q w, l使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。6 C$ C" s/ w4 V1 ?
前期准备:6 W' T# T. ]4 |; b$ x, Q# P
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ M: L9 j/ {) ]3 R
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
, F0 ^8 s1 ~. g方法解读:
( q7 `! Q( {4 h: o: @下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):2 J$ U' a) v) [- G' ]# h
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
1 J/ n, i# s% K6 }* d - {, y4 q& u. T$ E
- $enc = QRencode::factory($level, $size, $margin);( |1 O- W: u) T: C$ p1 J
- return $enc->encodePNG($text, $outfile, $saveandprint=false);. I. a8 C6 U r1 I: c3 z
- }3 a- X. y! L8 @" B U8 E6 s
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
( F, V, R1 j, q' Y 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;) w% q. y+ I' g0 D+ ] _
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
' E' K: o( Y! X: D& q# g 第4个参数$size:控制生成图片的大小,默认为4;+ Z% e; O0 A: {2 d. V( s
第5个参数$margin:控制生成二维码的空白区域大小;
/ q# k2 ?" Z! F0 k' z1 i! l 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ `9 M/ Z- [4 ~1 d: N9 X5 w/ }使用示例:
, O3 h/ U& a0 B, h0 X0 y- w7 M0 g1. 生成二维码(生成图片文件)
% K+ l' l% `# [0 ?' E# v D3 Z" ]- // 1. 生成原始的二维码(生成图片文件)+ u0 P2 W$ |& i9 j
- function scerweima($url=''){) e1 K: g+ T5 c. X( Q
- require_once 'phpqrcode.php';
/ L' E% {$ q$ t - $value = $url; //二维码内容% I V1 [" L; K8 w% e9 J% Q* U
- $errorCorrectionLevel = 'L'; //容错级别0 N3 C5 f2 C" j, h: d
- $matrixPointSize = 5; //生成图片大小
, I; H) z$ s( s - //生成二维码图片3 K/ I- r- t1 J1 Q, `8 q& {* p* n5 `
- $filename = 'qrcode/'.microtime().'.png';- C$ [% @' C- H: o' ?: t
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" J+ [% ~# r& E* F
- $QR = $filename; //已经生成的原始二维码图片文件4 f- f) \: F7 e9 |( M u* g/ `: ~( m
- $QR = imagecreatefromstring(file_get_contents($QR));
! C; d5 R4 u& p) l - //输出图片
& B; t7 O( }! ]! [ q - imagepng($QR, 'qrcode.png');
1 H7 U8 ]3 v. S9 }: _4 H - imagedestroy($QR);) H( U8 M8 _" z: V7 Y' m5 a5 M% r
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
, _' B# n' O# B0 F. ^- Q0 t/ o - }
; Q, k4 Z# X: R. Y9 v - //调用查看结果( n4 }# C, m( s2 r8 S# g4 n6 I
- echo scerweima('https://www.baidu.com');
" L4 K( [$ g/ m# o- Z1 t
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
( ^1 R/ h* y2 t/ @- //2. 在生成的二维码中加上logo(生成图片文件)% K2 W& N1 N: M
- function scerweima1($url=''){
; l1 f) Z K; S - require_once 'phpqrcode.php';! \* R8 S7 u8 A$ m
- $value = $url; //二维码内容
$ R4 }- r% g7 R0 e1 G - $errorCorrectionLevel = 'H'; //容错级别
! j( ~% m. g, d( y6 r - $matrixPointSize = 6; //生成图片大小
( g" f4 R3 F* p) Y$ i - //生成二维码图片
0 O& a' J) J3 L - $filename = 'qrcode/'.microtime().'.png';
/ e# t* U% m6 b6 y/ k7 Z - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);2 r: \8 t t0 U, V* s( D5 u% h0 h
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
; D- |! z7 p' z2 d8 L( E5 z' O - $QR = $filename; //已经生成的原始二维码图- ^* z1 o$ P4 p$ [* D& K
- if (file_exists($logo)) {
; c; `5 d3 x! N - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
0 p8 U6 H1 n; B) x+ |: w - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。5 ?( K7 i1 J& [
- $QR_width = imagesx($QR); //二维码图片宽度: g% y) a/ |, ?6 x# O
- $QR_height = imagesy($QR); //二维码图片高度0 J$ d( G' C$ f
- $logo_width = imagesx($logo); //logo图片宽度
7 V! o/ }9 o& x- o) @7 N' M. G - $logo_height = imagesy($logo); //logo图片高度
6 m) B; k X* _% ~4 r: v2 d1 y - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
. n6 o3 F4 \4 }/ S" { - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)* Q) f# e# X' K$ }
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
5 {- I" S; t! w# r5 Y' p3 _ - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
3 ]4 m" L# o' G: {4 N& j+ _ - //重新组合图片并调整大小
5 E: K; G, s) l2 \8 v: _ - /*/ L. r0 j* O+ ]1 U/ z2 o" ~
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中) c3 K& z7 m# W+ Q) H* P
- */ H& D# q# a, _% h+ D# V& b
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);9 G0 i. y& q& O H3 F, t
- }
6 T, }5 R! d1 u( R0 C - //输出图片
% ]( p2 k9 D8 S( t3 i - imagepng($QR, 'qrcode.png');
" c2 K* V* Z% Y - imagedestroy($QR);
* @5 ?4 e+ Q$ E# V - imagedestroy($logo);( f, _1 r6 l5 e: v4 y
- return '<img src="qrcode.png" alt="使用微信扫描支付">';2 U% X+ w* A. a t" K* X
- }
; f4 j4 f D; K( W/ W: D - //调用查看结果' Z! |" s W5 @- x7 F" k
- echo scerweima1('https://www.baidu.com');' B t3 x# v6 w7 A. I
复制代码 3. 生成二维码(不生成图片文件)
/ Z, V! x4 Y2 W9 s1 w- //3. 生成原始的二维码(不生成图片文件). U3 e. l. ^$ t" G6 `* c0 D; Q
- function scerweima2($url=''){
- d: @3 |( z4 ?: _8 I& S - require_once 'phpqrcode.php';1 v; W0 l9 X# R5 X9 r, ^
- $value = $url; //二维码内容
% X5 z, N C) n- K! u5 M - $errorCorrectionLevel = 'L'; //容错级别
- Q1 l% n* ~& ?( Z6 N4 |% A - $matrixPointSize = 5; //生成图片大小
9 `2 f5 e4 e9 H9 _( e3 q- G; G - //生成二维码图片9 j2 l/ |: L8 B
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);% Z& l1 y) }0 d+ d2 J
- }; a; ?" |: d) c
- //调用查看结果
, j& J1 a4 o* P - scerweima2('https://www.baidu.com');6 _5 Q" N' {! G5 t& m. @7 H
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。4 p" n+ o1 J2 `; J( B& x* C
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:. U9 n$ J# \% A) w- ~
在线生成二维码工具(加强版)3 K. d9 z. `. R0 i' {
http://tools.jb51.net/transcoding/jb51qrcode
/ v- p0 t* [8 r. F0 v+ n在线二维码解码识别工具
6 N) k, \6 U! L9 F) U. t4 Nhttp://tools.jb51.net/transcoding/trans_qrcode* |5 ~" h& P) ~3 I4 w
! w5 U0 _" E! A
G9 h6 u, ~7 {" N7 t- W
; g7 [8 P; T" P: l: W: w2 v/ z
; D7 {# M* o0 x& f/ ^' @+ r) I: b( l$ |
|