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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1678|回复: 0

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

[复制链接]
发表于 2020-7-20 21:02:46 | 显示全部楼层 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
8 x) }) J9 o% _使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。" ~9 k! _3 ~  Y& d
前期准备:7 t4 S9 N! r% l9 i( x9 t5 b$ b
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& c& ~% J5 z# y+ c3 {) n 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
$ o+ @: y# p- K6 b方法解读:
% a+ ^/ q+ D; [7 d! @下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):* S' a' C. `6 y+ E, s( q2 Y
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
      N4 M" A* n0 Y+ _$ S1 l
  2. {
    ! y/ Y' _3 M3 D
  3.   $enc = QRencode::factory($level, $size, $margin);
    3 k' o% C) ~# c+ Z0 t" H
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
      H# u' c, O0 H1 n. a$ Z
  5. }/ P# P& L# q- ?' x1 c
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
# m. ~. N! p* U- e9 v0 m 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
7 {; g) g3 g0 z% U+ d 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
" N  |: O4 ?7 J5 A0 E7 a' s: G 第4个参数$size:控制生成图片的大小,默认为4;
+ z2 l. n2 U' C/ e 第5个参数$margin:控制生成二维码的空白区域大小;: V5 u  l6 t6 ]
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;( S0 o* v& p4 z' Y( D1 X
使用示例:4 n- U# i$ A) e5 l4 I% ^& ~# a
1. 生成二维码(生成图片文件): B+ w( J6 g$ L2 Z
  1. // 1. 生成原始的二维码(生成图片文件)9 ~  M& ]: q: k8 D) E  \; w
  2. function scerweima($url=''){" D. T5 B4 t; x1 F7 v. j. H
  3.   require_once 'phpqrcode.php';  a( E: B+ a8 H" C6 ^. M( B6 T
  4.   $value = $url;         //二维码内容
    " s+ |7 D5 ~0 z8 \& Y
  5.   $errorCorrectionLevel = 'L';  //容错级别
    + @+ D( r& a* ~: V
  6.   $matrixPointSize = 5;      //生成图片大小
    % [7 G) N% v" E" ]% g
  7.   //生成二维码图片* N- c! i8 G- n
  8.   $filename = 'qrcode/'.microtime().'.png';% r4 u" U& s/ ^4 e/ Q7 {9 ~3 A
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);9 O4 |7 X6 K2 f' d0 o7 G/ y0 D# Y
  10.   $QR = $filename;        //已经生成的原始二维码图片文件+ f& T/ ^9 r3 w' I. H
  11.   $QR = imagecreatefromstring(file_get_contents($QR));4 h' g8 H. e9 k4 B' Z
  12.   //输出图片
    ' \% H8 L* A- A6 f; [8 Y/ i5 v
  13.   imagepng($QR, 'qrcode.png');
    7 q4 S( [& a/ ~  ~" z' J# S& d/ v
  14.   imagedestroy($QR);
    7 I6 j( g5 E$ D. t% Y5 J9 j) r
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';( A- n" K3 P) ~" Q/ X& l
  16. }+ r% e6 A4 e' \% o+ V0 H
  17. //调用查看结果
    $ E' p+ G- B9 h7 Q
  18. echo scerweima('https://www.baidu.com');
    % F2 C% m. U; `- l& ^
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
: q: v/ |1 |& o$ O  h/ f1 h
  1. //2. 在生成的二维码中加上logo(生成图片文件)% _- F" E8 p" W* R- f9 _
  2. function scerweima1($url=''){
    3 T4 }9 v: ~! Q1 t
  3.   require_once 'phpqrcode.php';
    : U* @7 \, V8 f9 p( F
  4.   $value = $url;         //二维码内容
    - p8 @% A$ w) n2 D2 S7 i: x
  5.   $errorCorrectionLevel = 'H';  //容错级别
    9 j- m- T  [' Z: b7 g% B6 z
  6.   $matrixPointSize = 6;      //生成图片大小
    1 F6 b; ^3 V: j
  7.   //生成二维码图片
    " r7 D' x1 C; C/ T, `) P
  8.   $filename = 'qrcode/'.microtime().'.png';
    + C. @. G4 Q8 C7 a
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);0 T! r! F8 D- b8 Z( z
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片8 v4 B4 |5 f* l* y" [8 T
  11.   $QR = $filename;      //已经生成的原始二维码图
    4 _4 q  g' z# |2 Z  s
  12.   if (file_exists($logo)) {& v8 C% e' W) n) Y) s
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。7 t. t: I0 u0 V
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    ) K2 Z2 ]8 j2 @( i6 v3 {
  15.     $QR_width = imagesx($QR);      //二维码图片宽度0 P" [( s3 S6 L
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    - }( u  _8 U* P6 C5 C) q" w
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ) t) [" S2 C. s6 Y# w
  18.     $logo_height = imagesy($logo);   //logo图片高度5 x3 V: l$ A% U" ?
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)" O4 y2 K) l" \4 ?' W$ X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)- b; ~# w% U" T9 f& q6 [2 Q3 G
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    # J9 c+ {# e  b
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    7 z8 v- ^1 ~$ C5 U, A/ v- Q. m% U. g
  23.     //重新组合图片并调整大小1 F( N6 K; I# J" ~  F" n: m$ q( Q
  24.     /*
    4 c2 ?/ O  r# u
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    - E! \: i2 k4 g1 c; ]# }
  26.      */
    6 Y& q( M4 f4 Q9 z* G! I
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);6 {3 e7 F& [5 J4 v3 g( W
  28.   }
    - o+ A$ n+ U* _2 w
  29.   //输出图片
      @$ N, ^8 e0 P* @% s( K3 f
  30.   imagepng($QR, 'qrcode.png');
    6 p2 D7 g7 o. {+ D( K9 L& y* z  y8 H
  31.   imagedestroy($QR);
    $ f# E" ]3 p# j
  32.   imagedestroy($logo);+ X* V/ k# K0 R7 ^0 E
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ' X) x! T. v. f  h- _8 a
  34. }
    + C- M6 M* d: a) `& Y( D. i
  35. //调用查看结果
    / O+ ~3 k4 M$ k, ?8 X! P
  36. echo scerweima1('https://www.baidu.com');2 \0 P5 c0 e8 T& w6 K* a
复制代码
3. 生成二维码(不生成图片文件)
8 e0 V* v, y; I$ [
  1. //3. 生成原始的二维码(不生成图片文件)
    * W5 {& L5 B/ C; Q, k4 c2 z3 Y
  2. function scerweima2($url=''){
    ; U( i- u2 H1 H) Z) m- B9 O0 n
  3.   require_once 'phpqrcode.php';5 ^1 {1 x: c: e
  4.   $value = $url;         //二维码内容6 l3 E0 O; G7 M9 d. ~  C
  5.   $errorCorrectionLevel = 'L';  //容错级别3 _  |2 |  g+ y
  6.   $matrixPointSize = 5;      //生成图片大小
    + D( M. [* I. E
  7.   //生成二维码图片
    : n  w2 W7 [# @1 g7 P# X% B
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    0 i6 M7 `/ w# B0 i
  9. }
    ; o% b3 |8 v4 z( B* b5 G; W
  10. //调用查看结果1 G; A9 U1 p0 B6 T6 Y% N
  11. scerweima2('https://www.baidu.com');
    * w" [& s( r: v6 B% A
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
) C! I! G7 r& xPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
& t9 x- K1 M! d1 e5 b- B在线生成二维码工具(加强版)) M4 Y% o3 {- X3 C0 ^$ O* s
http://tools.jb51.net/transcoding/jb51qrcode
; K( M4 V' ~) h% i在线二维码解码识别工具+ ]! y& ]! M  T1 r/ p
http://tools.jb51.net/transcoding/trans_qrcode+ `4 }( d" V1 N1 Z5 M- h( G
' X  s6 {$ V0 V8 v* \
% E' M+ H+ z1 M: t( ]
; l3 i$ a! P6 Y9 E. A. G
( C5 P& {, N8 ?! G% f

$ C9 i6 _8 W& b, j8 I& V) C
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2021-9-17 14:53 , Processed in 0.116576 second(s), 22 queries .

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