您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP基于phpqrcode类生成二维码的方法详解

发布者: admin | 发布时间: 2020-7-20 21:02| 查看数: 1362| 评论数: 0|帖子模式

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:( ?: g$ [4 }: l3 x4 h' |; |7 w
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。3 q6 f$ K% Z% c' c
前期准备:
  N1 Y! [; n' @1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/. l( U6 x) j. d0 l
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)3 f, [/ l) M7 P% G) M) F) j
方法解读:
% `' G6 \' {0 ^6 \下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
7 Q, f. Y+ |6 Q
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)6 h. v9 u4 O5 |) U
  2. {
    # [$ i: Y" s$ A# j6 B
  3.   $enc = QRencode::factory($level, $size, $margin);
    3 i" @! i0 L: w) p
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);& C- w3 F/ z, f; l) m5 L% @# I  E' j/ [
  5. }
    7 a7 N$ e8 {) S2 m' u3 K2 F
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;" {# w- ^3 p( L& U  s! }
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;- t; p+ L' J' G8 [, n$ h# O
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
& l1 t9 j, ?' p' [ 第4个参数$size:控制生成图片的大小,默认为4;
: V0 R) b- }- A# u& P 第5个参数$margin:控制生成二维码的空白区域大小;
7 e$ `5 w; k$ F9 v 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
5 [  Z- D3 k# p. @" y% D( y+ |使用示例:% @5 M7 J9 b1 I7 X8 X% V
1. 生成二维码(生成图片文件)
9 S1 w# e( m* B! s. `! \6 N
  1. // 1. 生成原始的二维码(生成图片文件)) V# x1 F9 O8 l  s# r! u
  2. function scerweima($url=''){
    5 Q4 D) O+ N6 p  i( |+ K
  3.   require_once 'phpqrcode.php';. y1 E2 |0 S% G3 t
  4.   $value = $url;         //二维码内容
    % A0 ?9 J8 P! g" u# I; b1 _4 p
  5.   $errorCorrectionLevel = 'L';  //容错级别# _: U7 `7 y& p2 x5 y
  6.   $matrixPointSize = 5;      //生成图片大小' F% u+ y5 v5 r; Y) y& F7 r
  7.   //生成二维码图片
    ' J3 i- n' P8 Y( O) ^9 ?, s
  8.   $filename = 'qrcode/'.microtime().'.png';* H- s- B; J$ b* x- l
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    . W6 s& w! e7 S
  10.   $QR = $filename;        //已经生成的原始二维码图片文件! i; `, X0 e  b. v5 c' C
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ! _; Z6 v. n$ l6 ?! g$ R
  12.   //输出图片( r. M- o6 t) e" d, `9 k1 r+ X3 _
  13.   imagepng($QR, 'qrcode.png');
    ; T8 I- D& h+ \+ b, }
  14.   imagedestroy($QR);4 t) @! H3 _& [# B4 I# O
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
      D/ R7 M/ i! A; b, r6 ]3 H
  16. }
    7 F8 r' ~4 a  a& q- A
  17. //调用查看结果
    0 T- Q0 k& o0 d! x
  18. echo scerweima('https://www.baidu.com');: T3 H, ]! s7 E+ k: A5 `
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
8 B! O9 V* X+ N$ f9 ]
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    7 Y4 N8 T- W5 T7 z1 L6 S: @2 G
  2. function scerweima1($url=''){
    + u; M! [, U! r& N. p% S0 H
  3.   require_once 'phpqrcode.php';4 N. n3 {' O8 k* ~
  4.   $value = $url;         //二维码内容0 ~" x0 s5 i# U! e
  5.   $errorCorrectionLevel = 'H';  //容错级别
    & u: S* m+ j: d) O0 S# H
  6.   $matrixPointSize = 6;      //生成图片大小2 d3 j" i4 M: @( ^
  7.   //生成二维码图片3 _9 l2 K0 E3 B/ Q3 S) s
  8.   $filename = 'qrcode/'.microtime().'.png';% r, ^. I% j: b" F7 j5 K% S6 T% d
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);( d$ r) K9 `2 v  h8 W+ e2 T
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    : W4 k9 s* s7 g- _
  11.   $QR = $filename;      //已经生成的原始二维码图3 P( c. G3 q2 a/ }- d8 ~
  12.   if (file_exists($logo)) {& ]9 u8 ?4 U6 f# ^
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    $ J3 ?) ]& {) G) T9 R6 U
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。: x/ \/ F7 Q7 K2 i9 {; o: W7 d
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ! q- J8 I3 g. c
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    + q8 _" ~% N3 f8 U" A) K
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    $ g+ a' k. {% B' y
  18.     $logo_height = imagesy($logo);   //logo图片高度
    , N* D) D2 x# R( S" G. G3 K& A
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5). ?- {, Q: ^/ |" A! ?/ I: s/ V0 z
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
      `4 d. i1 G9 X
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度% N8 U8 `! E9 m8 Y0 k
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    3 {+ |' n1 i" a2 Q  n6 O, \5 [/ l
  23.     //重新组合图片并调整大小
    / P4 j0 C0 N0 P1 t6 j1 V1 Y( s
  24.     /** g( S, R5 a: E
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    ; E* H8 c8 u0 i) k- y0 l
  26.      */; t* n- X. J" Z7 ^5 Y( h" O& W
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);! Z; g/ B& u  @6 N4 _3 B  b) i) G
  28.   }
    ! K$ M* Z% a1 K, Y5 N7 u" x' R, D
  29.   //输出图片
    3 k/ y1 w% l% s3 ^* _( t- `# Q
  30.   imagepng($QR, 'qrcode.png');
    - e# ]4 \- ^6 y# u* |6 U3 Y2 _
  31.   imagedestroy($QR);& ]$ A3 l! a7 K: u# |- E# P
  32.   imagedestroy($logo);
    . h" e+ k) [6 @6 B4 F
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ; p* m; Y' B3 X& m+ h
  34. }# I. `! @& N1 i& ?
  35. //调用查看结果
    % \1 B: ^$ r4 I' ]; q0 e
  36. echo scerweima1('https://www.baidu.com');; s+ M0 D+ N* v! E: S1 D
复制代码
3. 生成二维码(不生成图片文件)
& J4 L8 j3 D! G2 u9 k
  1. //3. 生成原始的二维码(不生成图片文件)
    ; b9 e" |) W; w. ^1 x& w5 f
  2. function scerweima2($url=''){2 j& ?/ D1 E$ {! d8 g$ O
  3.   require_once 'phpqrcode.php';3 J: W- k5 h. P5 ^+ C, M
  4.   $value = $url;         //二维码内容- _* w, m) C% k/ g. y! Y- O/ a
  5.   $errorCorrectionLevel = 'L';  //容错级别
    # }+ Z- _+ B7 |2 h( w# f' e, ~
  6.   $matrixPointSize = 5;      //生成图片大小$ \! A5 [. @. R5 y) f7 c1 }
  7.   //生成二维码图片
    ) U. b0 S- s% y8 x. ~7 f
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    0 ^) J& v$ U$ d( V% J9 ]$ a2 z
  9. }
    % g0 E" m" T; C+ @. e
  10. //调用查看结果, A: K% T2 ^6 l2 g: q* q: A* g6 {7 B
  11. scerweima2('https://www.baidu.com');' d7 P3 w6 t2 \  j4 I6 S! M
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
, P, C8 o3 k% D$ M- iPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
, X4 @8 T4 P0 h$ c3 [在线生成二维码工具(加强版)
8 K2 f' Y: S4 b( }5 a- E
http://tools.jb51.net/transcoding/jb51qrcode
& a5 a9 L2 A) ~4 D' S2 r在线二维码解码识别工具
4 j9 Z" Z# h4 g' _! F+ T/ s
http://tools.jb51.net/transcoding/trans_qrcode! W$ X& q- J/ ^/ Z9 p

1 f/ y, A- r+ r; B6 }
7 Y' E3 a1 ]% o9 C% x7 O! W: w! X/ R1 O" F9 J

0 E4 s- C; R1 c" W+ ~
7 e" n; K8 I9 V9 c5 I6 T1 |8 v  l

最新评论

GMT+8, 2021-8-1 11:36 , Processed in 0.150763 second(s), 22 queries .

Copyright © 2001-2021 Powered by cncml! X3.2. Theme By cncml!