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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14640|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP基于phpqrcode类生成二维码的方法详解

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:2 o0 `3 H( O, i8 z
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。9 L6 h6 f0 ], ~6 l
前期准备:4 u5 \: H2 S$ C0 k
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
- [/ \1 n" G% y" [; K- N 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
6 H( `; o' H. g) O- V9 r) F方法解读:" g. l5 j. }+ _. f6 g( ~; u: d
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
' X4 _6 a; B* F9 u
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    % \$ x( ~& a6 l; |0 ]
  2. {
    ' O8 A1 j* G: N& F
  3.   $enc = QRencode::factory($level, $size, $margin);
    5 k# i' j8 x5 F' z, k2 V( V
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    6 i& ^/ [( Q8 [8 z0 {
  5. }$ t2 u8 g& ^6 W2 L0 T2 o; e
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;& l# L/ H2 m4 F5 c7 z7 _
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
/ Q, l, W8 `1 v0 Y8 K2 t. | 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;! H- n1 Y+ N( Q$ J$ B, S" I
第4个参数$size:控制生成图片的大小,默认为4;
1 m( ^, F, l8 L0 q* H: P 第5个参数$margin:控制生成二维码的空白区域大小;# O& X' K9 ?1 f! g4 L
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;7 b- G  o3 T- F, A: x. g  D( l
使用示例:/ W( T7 ]0 z& x
1. 生成二维码(生成图片文件); i8 y8 B! s: X
  1. // 1. 生成原始的二维码(生成图片文件)+ S- q5 P7 S+ y9 S2 f; u. [5 @3 d8 x
  2. function scerweima($url=''){3 @1 ]. w4 o: ^) L# K" ?
  3.   require_once 'phpqrcode.php';# S' D% ], a( q% @
  4.   $value = $url;         //二维码内容
    / w! q; W" I) f4 }4 ]* x
  5.   $errorCorrectionLevel = 'L';  //容错级别
    % k; ^' ^. E6 u: e( {" Q
  6.   $matrixPointSize = 5;      //生成图片大小
    . |  u7 e6 s  R$ C, z
  7.   //生成二维码图片
    ! ?6 E/ N8 L$ W( i! b- U  ^! a
  8.   $filename = 'qrcode/'.microtime().'.png';. P3 D: b4 d$ v% q: [8 h8 c
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    1 Y) K5 ~& ?# K$ E+ C( c# v) t
  10.   $QR = $filename;        //已经生成的原始二维码图片文件3 G# a; m. p+ x
  11.   $QR = imagecreatefromstring(file_get_contents($QR));! U! J3 Y( b) X) d& b! S) c2 H
  12.   //输出图片
    / H6 S/ s, ^6 L& k2 [
  13.   imagepng($QR, 'qrcode.png');
    * P$ \% }5 t" p: }
  14.   imagedestroy($QR);% B" x4 ^! H$ ?, y
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';/ F$ Q0 g  J. Z1 E- I( M' t
  16. }
    , z4 v6 W- R+ @$ s9 ]  z
  17. //调用查看结果
    4 m3 V( y( e1 ]
  18. echo scerweima('https://www.baidu.com');
    * \# D# P8 S9 r% T/ G% A' f+ K7 @
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
0 ]" X% z( L0 w+ N
  1. //2. 在生成的二维码中加上logo(生成图片文件)$ ?1 j) U1 q# O- l4 B! K. O. x; ?
  2. function scerweima1($url=''){: c4 W/ H7 [' e$ t8 A
  3.   require_once 'phpqrcode.php';
      }  v7 I. p/ q
  4.   $value = $url;         //二维码内容
    4 C9 m# x8 n- a' n# y, u& J
  5.   $errorCorrectionLevel = 'H';  //容错级别
    : R7 Z. d  y, q$ t& i
  6.   $matrixPointSize = 6;      //生成图片大小
    & a9 Y% _& n8 ^! F
  7.   //生成二维码图片/ F2 X, S+ m2 G+ \
  8.   $filename = 'qrcode/'.microtime().'.png';
    * d( j; |4 C" j
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ' t' C  G! g% Y' B8 ^
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    & K! ^! `- k5 q9 G2 O
  11.   $QR = $filename;      //已经生成的原始二维码图9 Q" I1 h) n' P9 J4 F3 a/ u6 r
  12.   if (file_exists($logo)) {8 o8 W3 X* A+ a8 {/ {! a' y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。/ I8 k$ H2 |6 \; |5 F; N
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。- J" d, K1 t5 k' P: C8 u
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    : h- o  y2 U& ]
  16.     $QR_height = imagesy($QR);     //二维码图片高度, I  t9 z2 }- ~( b
  17.     $logo_width = imagesx($logo);    //logo图片宽度' _$ f2 F+ c' W/ K1 R
  18.     $logo_height = imagesy($logo);   //logo图片高度
    ! p& I+ ]* p- O- l5 |5 G
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)2 S. U- q: V& I/ t; G' X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    3 s: b2 ~) d" P
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    6 H  K" m5 |3 T. h
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    8 {  H$ ^. E/ O$ Y- B" O# n
  23.     //重新组合图片并调整大小( k$ Y% f  o) A. c3 W: x
  24.     /*/ i. g* S5 M) x1 p9 x9 t' F8 w5 u  K
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    $ I7 ^/ a" i5 x
  26.      */
    , h0 Y. N7 b' _6 v+ A+ N
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);) n. W. S% H) ~, m
  28.   }
    8 i; h  _( L- l
  29.   //输出图片
    $ N. k% a$ V* T
  30.   imagepng($QR, 'qrcode.png');
    9 p* d" L. s& S" m; R, ]5 r# `; r
  31.   imagedestroy($QR);1 G1 V- a; E$ u
  32.   imagedestroy($logo);
    9 E6 k/ A" ~5 J- U8 H3 v3 W; Q
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    $ ~! ~4 D; X1 H7 E& e, d" k/ o) d
  34. }
    & ]/ h% ]7 o! T/ S6 {! j' z! L
  35. //调用查看结果2 B, Y3 s7 J) Q  E9 B* W
  36. echo scerweima1('https://www.baidu.com');
    9 i* a: E9 Q1 ?
复制代码
3. 生成二维码(不生成图片文件)
9 _9 ]5 n: L! b( _& S. P! i
  1. //3. 生成原始的二维码(不生成图片文件)" G  C+ G1 @. u7 D" B2 s' t
  2. function scerweima2($url=''){5 {7 Z' i3 |* P$ ]+ R8 }  v- C2 @
  3.   require_once 'phpqrcode.php';1 `2 W0 S( t) g  p9 P: U: ~
  4.   $value = $url;         //二维码内容1 a! z4 d& ]5 `* d6 p. m3 t
  5.   $errorCorrectionLevel = 'L';  //容错级别
    9 w# `8 F4 V4 j$ v0 t$ C
  6.   $matrixPointSize = 5;      //生成图片大小
    - Y" t& u$ V$ X* ^3 p& {
  7.   //生成二维码图片' [; K* v6 n' T0 X
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);6 Y* A6 F6 }# e7 u6 E3 r
  9. }
    * s% |9 K% t% B, t- C
  10. //调用查看结果
    - g* a0 Z1 i1 i+ c2 s. k
  11. scerweima2('https://www.baidu.com');
    8 A8 z6 ~9 J1 Q4 x' P
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
5 e/ ]. l9 j. r# e/ [PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 ^! e3 k' B& c2 j; K0 G0 G& Z在线生成二维码工具(加强版)
% ~  `: H: s- x1 a
http://tools.jb51.net/transcoding/jb51qrcode1 d& }& N8 f, l& u  v
在线二维码解码识别工具; \& x" i- `7 S9 s  N) x, V% u4 O5 z$ V
http://tools.jb51.net/transcoding/trans_qrcode
& R5 T/ z, I# X0 A2 [; j4 |/ Q  L+ i
& j* T' m4 x) ?3 B
, l, _5 Y) b% w) M' ^" v( b* z
$ n, M& }2 f( C/ k/ T; }
  K% |8 ^- v6 c4 t5 l5 H+ m, @' |# r8 n* W5 c7 H2 a! _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 16:06 , Processed in 0.071907 second(s), 19 queries .

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