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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:) F& ^3 D- i% n0 ^7 L- [
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。9 l* A& C. m$ U( u6 s& e
前期准备:; M' ^7 R, J+ j- n- x
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/& N, o' B3 b; `( C7 `$ m9 T. H! J
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 H; [& b8 M( {) _
方法解读:
( s1 k7 i0 y5 p7 U$ i下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
" e' Q. W0 T) G
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    $ z4 w2 S* H$ ]6 y1 X9 w- ]
  2. {0 `2 u9 D  T4 W1 v
  3.   $enc = QRencode::factory($level, $size, $margin);
    % m* S- N, }+ z6 R
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    5 ^4 x: r4 I# I: E7 Y
  5. }3 A' R4 A' r4 n; T; C3 v$ a
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
4 F2 Y* W+ `$ I& o( Y 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;* ]6 K3 N! m# c: g; U
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;2 c% \$ n+ G' _
第4个参数$size:控制生成图片的大小,默认为4;
- Y+ x- S: m, X+ }7 Q8 f, x9 u 第5个参数$margin:控制生成二维码的空白区域大小;
6 v" }2 w# h4 ~% Y; Q 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
6 z6 U' H% |  s使用示例:
$ i7 ?) r% J! b, y. z' Q* F+ _1. 生成二维码(生成图片文件)1 E& J5 a( s3 z9 R0 u' ]
  1. // 1. 生成原始的二维码(生成图片文件)
    3 i& Y4 S$ s$ v6 f/ k$ {; U4 ]% ^, V
  2. function scerweima($url=''){
    . l; s3 D4 k7 o
  3.   require_once 'phpqrcode.php';
    ' d! {& r6 w6 B% ?5 ~4 B3 C7 ]3 O6 l2 A: d
  4.   $value = $url;         //二维码内容) w9 ^- z9 |8 @: k
  5.   $errorCorrectionLevel = 'L';  //容错级别7 D# b+ Z" C; l5 E! I, J& \4 P
  6.   $matrixPointSize = 5;      //生成图片大小' r: O) u4 [9 w/ G: e
  7.   //生成二维码图片: {0 X- i% N- y5 g# l" G/ [
  8.   $filename = 'qrcode/'.microtime().'.png';
    0 L; ?' I" T  M" X5 g
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    4 z. j7 @$ I; F( B, T/ I6 V
  10.   $QR = $filename;        //已经生成的原始二维码图片文件7 g) j; j, W: k1 \9 z" ?
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    + o6 O& Q0 d4 |4 B; H  S- W* H- j
  12.   //输出图片5 L! U) D9 n2 X+ H' L! z
  13.   imagepng($QR, 'qrcode.png');/ o+ T3 F; S( _" D( p! Y# ~3 c
  14.   imagedestroy($QR);
    2 H% I+ k5 H9 k/ n0 w& ?
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    3 @" B0 O& t* w, R9 i! e5 v$ n( G& g) r
  16. }, q! G. X7 o: }: U: g% Q
  17. //调用查看结果4 X* I) {* R% `* `+ J
  18. echo scerweima('https://www.baidu.com');- Y& i# q; B/ ~5 y. Z
复制代码
2. 在生成的二维码中加上logo(生成图片文件)$ m. v: j4 f! K* _3 i8 n2 O
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    % i, B. }8 j2 g5 L% x3 P1 q
  2. function scerweima1($url=''){
    ; A9 m3 ?$ ~) k9 L1 V
  3.   require_once 'phpqrcode.php';, {) q; L' s/ d$ y$ j$ D) a+ q
  4.   $value = $url;         //二维码内容* L* ^1 ]7 J! v* b# r
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ( X, y  u  O# Z$ T* q
  6.   $matrixPointSize = 6;      //生成图片大小  Z$ w0 z  q' y7 f5 ]- J' T6 a
  7.   //生成二维码图片
    ! Z( @, l; {5 ?7 Z9 ?
  8.   $filename = 'qrcode/'.microtime().'.png';
    ' U0 v* l0 b0 H1 a! c2 C. K
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    / S8 y$ c9 F* X5 h. X/ J
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片) G0 G) f7 l# J7 J( H: U  m
  11.   $QR = $filename;      //已经生成的原始二维码图* p" F1 @- }1 q0 M* s! s$ }
  12.   if (file_exists($logo)) {" w. V$ F) x, ]' G/ y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    1 o& @( ^5 G$ q: ~4 S4 K/ e$ F0 w
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    2 G4 h' W. w$ L: ?  q( ]6 k
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    9 C( S% i- D2 c8 B( D7 O8 I+ @0 {
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    $ i0 [+ r! D4 @2 ~3 f8 b7 l
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    - g# ~+ y! \, t
  18.     $logo_height = imagesy($logo);   //logo图片高度) H7 U/ c1 M$ a3 n3 {1 Y
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    * x) R0 a. P, t9 \+ d* j1 b
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    ) C; B7 D: f& r7 c$ c8 o% j
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度' E, F7 P$ ]0 d# |9 `
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    7 S5 ?" |9 L& y4 B
  23.     //重新组合图片并调整大小
    # g' E: E) T7 D: ^* Y+ N
  24.     /*  t& S0 t, A) L. y2 f  Y
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中: `8 ~$ h; D" W
  26.      */; x2 d; t) |  i6 ~/ L: i) r
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    $ D* c9 I2 @) z
  28.   }- E! t: ~- c  g
  29.   //输出图片7 f7 \( z& q3 P5 z- T: e
  30.   imagepng($QR, 'qrcode.png');
    6 B" f- B+ r7 a. X
  31.   imagedestroy($QR);
    # J3 d# M$ g% F% @- {7 l
  32.   imagedestroy($logo);+ A/ o5 a0 D7 S  L0 M% X0 z
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';3 u9 c9 x( A  m5 J, _8 |/ E" w( N; L
  34. }
      E) r' j. r% j$ ~. H
  35. //调用查看结果9 ^$ b+ f( Q0 F5 Y# K6 x
  36. echo scerweima1('https://www.baidu.com');
    6 n+ ?! Z: C# E: K3 W( S
复制代码
3. 生成二维码(不生成图片文件)9 ^0 h( r6 n3 P. _
  1. //3. 生成原始的二维码(不生成图片文件)
    - I1 m$ I& ^$ y) j' K+ [
  2. function scerweima2($url=''){
    4 i7 E/ [9 w+ ~9 l6 H: H! o" u7 V
  3.   require_once 'phpqrcode.php';& I* Y" q7 e8 R
  4.   $value = $url;         //二维码内容
    / f% [4 G( `- w+ H  V) e& o: N! `0 M+ n. L
  5.   $errorCorrectionLevel = 'L';  //容错级别1 w# |0 a; ?4 G9 B. _3 t
  6.   $matrixPointSize = 5;      //生成图片大小
    4 ]' z, y3 a  s4 p! g* }7 O
  7.   //生成二维码图片
    5 z* e3 ^& p4 `% J
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    # k! S$ }3 @4 V. C4 q
  9. }
      j4 m: j; B3 r2 ^& I
  10. //调用查看结果
    + X0 B- w9 _3 U( K
  11. scerweima2('https://www.baidu.com');
    6 `% m) m- F7 F4 h- d1 R- o
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
$ I3 L: \' ]$ R, ]9 _PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
! y8 M, ]" o0 `2 L在线生成二维码工具(加强版)9 a) b# C: y0 Y  D6 e* G& T' V
http://tools.jb51.net/transcoding/jb51qrcode
2 j( o" N8 d- g* p: n  U在线二维码解码识别工具/ n( R8 H6 L) z( ~- _& k; V9 G
http://tools.jb51.net/transcoding/trans_qrcode
. Y; x3 c7 j1 j& l% H: q! D( H, |$ T: ^- f$ a0 U
' r& T' E  e9 T

1 y  v( r. _" ?9 _
6 ]3 q" G" H) x: _- @% x8 G5 p. `& l: D3 C* n+ }/ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:22 , Processed in 0.126284 second(s), 19 queries .

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