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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
# h8 ?$ g8 p* O. j/ O. M* {  x使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# e' @1 m  e/ v# ~
前期准备:
3 ]' i' Q& d% N- U5 T* \$ v1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. ]  w# J: @. V5 o' o4 W6 j 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
6 y" N- ]' k# ]方法解读:
* R% g. q; _, E9 u下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):0 s' G3 R" W4 K; K; |& I
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)6 H, ^3 H% |0 E9 d5 o# o9 I# A6 T
  2. {
    $ m; f( ~+ d8 E# c1 U/ W- Y6 L! h
  3.   $enc = QRencode::factory($level, $size, $margin);
    3 K5 b+ Q2 z+ f; _) q& t+ i
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);7 S4 c. L2 S( ^/ T3 A
  5. }/ u- d/ r4 w! M! T
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
. [2 i, i/ y5 S( X$ x& {7 y9 d8 [ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
$ V% p1 u  u5 C9 O. e 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
" E+ M0 N% q7 N1 j7 [ 第4个参数$size:控制生成图片的大小,默认为4;
1 `. w* P! Y5 y3 o; l6 A2 p# | 第5个参数$margin:控制生成二维码的空白区域大小;1 T" ^3 Z1 s6 ]8 D) s4 c
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;, y- q* s4 d- }  n; E* L
使用示例:
9 a: ~, |/ r- \2 {1. 生成二维码(生成图片文件)' O* q- @4 z, O  I# o2 A
  1. // 1. 生成原始的二维码(生成图片文件)
    4 S* z' l" g1 A2 }0 v8 n
  2. function scerweima($url=''){5 [3 O2 V( x) l6 M& |( T0 i* _' V
  3.   require_once 'phpqrcode.php';
    $ ~9 I* Z/ }7 L
  4.   $value = $url;         //二维码内容. C, A* W* J0 X1 X% O
  5.   $errorCorrectionLevel = 'L';  //容错级别
    % P: P' c. X. S( c0 i# x& H
  6.   $matrixPointSize = 5;      //生成图片大小
    ; r9 ?1 e; a: r; n
  7.   //生成二维码图片& @# g6 ~" W! i+ W
  8.   $filename = 'qrcode/'.microtime().'.png';5 q7 v! t* G% K
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    4 j+ d; K) V5 ~
  10.   $QR = $filename;        //已经生成的原始二维码图片文件4 X  y1 T" H- k* Z$ X, B: u/ z
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    & b$ Q6 K* v  [; f6 {
  12.   //输出图片( Z; P& E; o- v
  13.   imagepng($QR, 'qrcode.png');
    0 ]. J5 D" k& z1 Z
  14.   imagedestroy($QR);
      s+ P" `9 v9 F% V% ^0 l
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';: z+ ^, E* F% v% ~* I, M: n$ n; O
  16. }3 U- P# u1 p5 ]
  17. //调用查看结果
    . {. N5 y( z3 o; A
  18. echo scerweima('https://www.baidu.com');
    + F9 G: P! _9 h! c; d% i9 u
复制代码
2. 在生成的二维码中加上logo(生成图片文件); t7 t; t2 j& j* X. S' G
  1. //2. 在生成的二维码中加上logo(生成图片文件)6 s! D) R/ ~) e3 \
  2. function scerweima1($url=''){
    1 i0 t# ?7 O7 b  _% \" [8 O; b% B
  3.   require_once 'phpqrcode.php';. V1 e" T* s$ M
  4.   $value = $url;         //二维码内容) m0 {' F; O- w+ [
  5.   $errorCorrectionLevel = 'H';  //容错级别% Y/ x% ]5 ?' C; ^0 e
  6.   $matrixPointSize = 6;      //生成图片大小. s' `2 O! y+ t. \6 Z9 t9 y
  7.   //生成二维码图片
    0 _- h. _$ K. q4 F4 e$ L
  8.   $filename = 'qrcode/'.microtime().'.png';6 E9 y- L: k' O* G' V
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    . Z0 D1 z: C) X% {
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    / Q7 Y, l! B- V. k5 l4 @
  11.   $QR = $filename;      //已经生成的原始二维码图1 l; S" i3 S+ t6 z% V- p
  12.   if (file_exists($logo)) {- Z( }; H$ _+ A4 l7 |0 }
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。, u/ n; f$ N3 G* x- k/ G$ R
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    9 S7 k3 k/ L0 v* b. B
  15.     $QR_width = imagesx($QR);      //二维码图片宽度* z$ T7 v* x- w" T' k& U, ~; @
  16.     $QR_height = imagesy($QR);     //二维码图片高度& N# k- ~5 ?4 G8 p0 i, e
  17.     $logo_width = imagesx($logo);    //logo图片宽度1 C. t2 l( F' T  S( _+ }
  18.     $logo_height = imagesy($logo);   //logo图片高度$ ?0 s  l  ~! y, O7 \$ u/ p
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)3 M) p4 L8 P4 H3 X) H! l
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)" f; F) J$ o/ a, `. r  V
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    4 r, F/ ]) W& \- [+ z
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点( T2 \6 N/ }! g5 H2 [1 i, f! F& }
  23.     //重新组合图片并调整大小
    - S6 Z! g- Y( e4 b/ E, m( e
  24.     /*
    + i  h! |5 Y# E1 O& O: y
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中' e# E: S1 \4 b/ t3 m9 q. j
  26.      */
    8 X  v4 a, e: E
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    - U8 ]& F8 }5 q$ a+ c2 p
  28.   }! D& W6 H; e8 b4 u
  29.   //输出图片
    ; u) g1 S& G' l1 W1 n
  30.   imagepng($QR, 'qrcode.png');
    ' y* x& E6 x' d9 I. c
  31.   imagedestroy($QR);2 T6 V$ g; Z5 ~+ q4 e
  32.   imagedestroy($logo);
    . w, r) i" d/ C/ [' o
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';1 D' P( Y3 I6 X1 @, h0 G. ^
  34. }6 k( V" L% z  e3 ]* [; W
  35. //调用查看结果
    6 }6 ]9 N/ \$ u. t
  36. echo scerweima1('https://www.baidu.com');
    # s0 J9 [; o  I( {, j+ q6 z3 K" ~
复制代码
3. 生成二维码(不生成图片文件)) |- Z% K  A; n5 C: e
  1. //3. 生成原始的二维码(不生成图片文件)
    4 ~" C; F3 k9 n$ j# a
  2. function scerweima2($url=''){. t4 }2 P9 t/ v: c' \" W0 K
  3.   require_once 'phpqrcode.php';, A, t+ n( G. h# N+ x/ q: N
  4.   $value = $url;         //二维码内容
    : @& U% ^. Y" ^) \
  5.   $errorCorrectionLevel = 'L';  //容错级别
    9 a" \: ?0 P  U1 I+ D2 \
  6.   $matrixPointSize = 5;      //生成图片大小
    & R& V& A" ?* c, S5 ^
  7.   //生成二维码图片
    ) Z! o1 T4 h: J- @6 Z" O
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    " l1 B9 t/ J5 u
  9. }; ]/ K* ~. ]" U: ]$ a4 _( y/ Z: d" [+ |
  10. //调用查看结果
    ; u9 G5 T! c! o- S. T6 P1 S+ u) S
  11. scerweima2('https://www.baidu.com');0 F! a2 \, a) G# m, K
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( X/ Y& y, Y) `+ T$ F/ U
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 U' t' }# p* F* h& y
在线生成二维码工具(加强版)
  l# h. V4 `5 K/ \# b: {
http://tools.jb51.net/transcoding/jb51qrcode
0 c- m4 k- @: T! {7 E在线二维码解码识别工具
) d/ k9 y+ d2 \
http://tools.jb51.net/transcoding/trans_qrcode
2 Z0 a4 [) f8 k+ w4 }
1 v' }6 }) z3 y8 p/ h4 f: s
! h' L9 K, i! J8 p6 u& E( X# h+ o- [4 m; ]
4 t$ l" y4 v8 T& [

$ S. W- v& }9 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 09:54 , Processed in 0.103538 second(s), 19 queries .

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