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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:- K" z! ~6 K/ Z( l" f
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
- k% a, h- ?0 D  o! n前期准备:
' p' o7 j& B1 w3 t1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& C# J$ `' f0 h5 y: |" F 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)2 Z) l% K9 J( `$ T! I
方法解读:& ~+ ]- M! P( y; ^1 G
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):4 w- K- ?" u& Z% L8 @
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    & W9 W6 d) _7 |5 z" z) _
  2. {" E9 z4 l( @3 {! v8 a& i- O
  3.   $enc = QRencode::factory($level, $size, $margin);6 H$ |; y# Y6 J& ]1 ^5 t8 P
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    $ @. S' l$ G" E' W
  5. }
    4 t# e9 ^2 i; J: g2 r
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
8 k, s5 k5 M6 O8 K5 \ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
( f6 z9 |5 i  m# o4 L; P3 e 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;$ V: k- _/ S* k
第4个参数$size:控制生成图片的大小,默认为4;
% f$ m; O- m8 z 第5个参数$margin:控制生成二维码的空白区域大小;
1 c1 z" P1 t, G  J9 O0 P$ A 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;1 `8 f4 ~0 r! _1 J" t0 l6 S/ K
使用示例:) I, H/ F5 n1 |4 k
1. 生成二维码(生成图片文件)1 p( g( Z. J5 k5 L8 C2 r  [
  1. // 1. 生成原始的二维码(生成图片文件)
    ! }/ n: S# t( P/ s, \1 g4 R3 t% ^' r
  2. function scerweima($url=''){" \9 o2 |, t" _8 }
  3.   require_once 'phpqrcode.php';; M2 J7 e* Q% I, E+ b3 i
  4.   $value = $url;         //二维码内容8 y8 p6 D3 b1 I6 h  t9 _7 a
  5.   $errorCorrectionLevel = 'L';  //容错级别
    5 D, e5 q* [6 J
  6.   $matrixPointSize = 5;      //生成图片大小8 \+ o- N# m3 o8 f" i
  7.   //生成二维码图片' `8 A9 V0 r  A# e
  8.   $filename = 'qrcode/'.microtime().'.png';1 Z9 g$ m+ y( [8 K1 m2 C
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);1 U# s7 h3 p, g# o6 \/ S
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    : Q' J; q" R- q, I- s9 f9 x* {
  11.   $QR = imagecreatefromstring(file_get_contents($QR));/ q, h/ h: x; R1 D
  12.   //输出图片
    2 ^  _, @0 k; g" U6 M2 t5 Y2 j# ~- I
  13.   imagepng($QR, 'qrcode.png');
    & @; K/ h6 P0 u3 R2 q; K
  14.   imagedestroy($QR);
    5 Q8 l! S! A& P
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';# F. q' S7 S4 j& e
  16. }, l8 z) N3 T& h0 Y0 b
  17. //调用查看结果
    - r2 J; n/ @( {5 |3 b) L8 j
  18. echo scerweima('https://www.baidu.com');
    : H) W; ^) {9 M/ @% a1 K
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
+ l! Q- Z" w7 O8 R  H# w2 {
  1. //2. 在生成的二维码中加上logo(生成图片文件)% r4 v$ K. c7 \# K3 L* \: s
  2. function scerweima1($url=''){
    . U, y. }6 u5 g8 E
  3.   require_once 'phpqrcode.php';7 K! x. v) y1 ^. i9 L
  4.   $value = $url;         //二维码内容
    - ?, X. i: k4 Y
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ! E+ H4 V6 ?  ]9 c! t  J$ h* r
  6.   $matrixPointSize = 6;      //生成图片大小! t& i- \# L) g
  7.   //生成二维码图片
    5 p& T% L6 x1 m4 ~2 k
  8.   $filename = 'qrcode/'.microtime().'.png';
    0 H& d9 _) a& Y
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    7 y( l6 ]8 w6 y& J" z
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    7 \% i3 L. b6 P7 P$ T3 ]. [8 I
  11.   $QR = $filename;      //已经生成的原始二维码图5 o4 \' \: w6 e- c* n
  12.   if (file_exists($logo)) {
    + r2 }$ D2 t* i
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    . T+ E' a, [0 c( G3 }: z! x2 c
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    ; D6 e. e$ @8 I$ t. a$ @; y9 x5 \
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ; P1 r5 F0 _1 W2 v+ n4 Z: K
  16.     $QR_height = imagesy($QR);     //二维码图片高度- H  [# I% B/ ?: ?; R
  17.     $logo_width = imagesx($logo);    //logo图片宽度7 `' {0 Z6 O7 j9 g# A
  18.     $logo_height = imagesy($logo);   //logo图片高度8 v, ~$ n' F! V# J" i* K
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)% p% |! Y+ }/ e7 U! }3 i
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)( R3 B7 |, U9 y: D. ?
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
      X( k! y' A$ [) U
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点* T; @9 B( ^! o# z2 A
  23.     //重新组合图片并调整大小) a9 X% g5 {8 O! v, q& p3 V
  24.     /*9 d1 N  N! `- w" z# u
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中8 b/ z, z( ]% ~3 M  i# ]' g
  26.      */7 a# ~; E5 O  |1 {4 O
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);" \% }: p" c  w' E. j" Q
  28.   }% D2 F7 p! Q8 ]+ j( K3 _( r
  29.   //输出图片2 @8 l. i) Y* y0 L5 B( D/ K
  30.   imagepng($QR, 'qrcode.png');
    - ]7 @2 A8 P2 d" D6 C
  31.   imagedestroy($QR);
    " {9 |/ p3 S& k0 ]% }3 G9 t
  32.   imagedestroy($logo);9 `7 x' v& n; Y, [4 b# u
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';! }. x$ {3 w2 C5 G6 r2 c9 g
  34. }1 K' J, S/ A& G
  35. //调用查看结果
    % g5 e* d5 E! r- L
  36. echo scerweima1('https://www.baidu.com');
    * W  R7 y6 _! i6 B
复制代码
3. 生成二维码(不生成图片文件)+ y. g5 e; _# d* F5 V
  1. //3. 生成原始的二维码(不生成图片文件)
    3 x/ P! g$ L: c
  2. function scerweima2($url=''){" q: U# ]8 U$ Y7 w
  3.   require_once 'phpqrcode.php';0 `8 N8 p; V! `$ ~
  4.   $value = $url;         //二维码内容
    7 `' q/ s! [: \( h) b
  5.   $errorCorrectionLevel = 'L';  //容错级别
    6 Y( r. u! J% u. p, e  C" _
  6.   $matrixPointSize = 5;      //生成图片大小& S2 y1 H( u$ n, E# p
  7.   //生成二维码图片6 q- R+ J: y9 `9 x" [- N7 p
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    ; `+ J6 J% j& O6 b8 J
  9. }- h, y0 f( d' `& Q% I; C) |
  10. //调用查看结果  u3 y2 ]; A4 a1 g
  11. scerweima2('https://www.baidu.com');
    $ Q$ N3 G( P! T. D0 y9 T4 Q
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。) V- [2 O4 |& l& B* I
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
) @  H2 h% n4 x  {) d: s) e) V; o在线生成二维码工具(加强版)7 d8 n6 E; F* w" h! ?
http://tools.jb51.net/transcoding/jb51qrcode
& |2 B, @0 R+ {8 I3 z在线二维码解码识别工具+ U: P5 X* G, H3 v8 X2 ?
http://tools.jb51.net/transcoding/trans_qrcode& u; Q! p# i2 ]" z/ L9 b

3 J* |3 Z" I5 q# w
$ ]. v6 O# x- ?7 h: r! ^- S$ [

$ s, y- g, o% f; k4 \+ Q+ \  _
& d5 m, a4 `% e7 v1 |7 W& C, f* \" L

最新评论

GMT+8, 2024-4-27 00:02 , Processed in 0.133820 second(s), 32 queries .

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