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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:9 |' j: y6 D: v
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。! E. b: u; U$ N  B+ v
前期准备:
  p, J; [' |9 Y/ ?7 C* i: i1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/- a' O9 X- i) Q- L! h
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
' L. D& ~; m1 o6 t) D$ B) k方法解读:
( n: I" Q" L7 l  P下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
. ]* i# |2 [) h% ?1 k7 j
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)  H! Z0 G+ i) F  R: M
  2. {- O) `$ s8 g2 x7 \& ^! K" x
  3.   $enc = QRencode::factory($level, $size, $margin);
    9 M) z. h; N; z2 B" s, m2 H
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    4 D" R7 C7 o1 u) l
  5. }
    % Z% t0 ], c/ A% L. ^
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
3 }8 x! D& ~( t 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;# {4 ]/ A" \+ D# s! Z, {
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
9 E1 K% p* i5 g, B& M 第4个参数$size:控制生成图片的大小,默认为4;" V8 b+ y- c: a$ m4 J# O1 z! w3 J( q
第5个参数$margin:控制生成二维码的空白区域大小;
8 h" k" J7 A  Y9 o- J( w' Z2 X' \ 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;) A' C& [. z6 j% i' _; g
使用示例:
+ I- }+ b/ o6 v1 S8 a4 u- `% U1. 生成二维码(生成图片文件). x( K! a3 S2 g6 |
  1. // 1. 生成原始的二维码(生成图片文件)
    & x* v5 A0 [9 O6 Z
  2. function scerweima($url=''){
    5 ~; Z) ^, F. _# x: o8 e
  3.   require_once 'phpqrcode.php';
    : b; r! l: o. D8 r# w& S2 i
  4.   $value = $url;         //二维码内容1 P0 g- i. u5 _! _( S
  5.   $errorCorrectionLevel = 'L';  //容错级别
    " b; v$ k: t: H7 _, S
  6.   $matrixPointSize = 5;      //生成图片大小: F8 ]6 S7 l4 D4 Y8 w% W
  7.   //生成二维码图片" b& `+ l9 J8 P
  8.   $filename = 'qrcode/'.microtime().'.png';
    . p# n' ?& G2 m" E  E& D+ C. [2 s
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ( r" P. @+ _0 ^
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    2 P" D  x! r5 T2 q+ m
  11.   $QR = imagecreatefromstring(file_get_contents($QR));; S2 |6 w. W5 w9 h8 ^, _
  12.   //输出图片, n  {( z2 N+ E4 ~6 E# z: @- J
  13.   imagepng($QR, 'qrcode.png');
    ; }# u# y2 w! b; v
  14.   imagedestroy($QR);& m, x% D& d) J5 o: m
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';' F/ K2 Z% b# s; H# t8 s
  16. }
    0 i* z9 F8 O& N' ~- |; M
  17. //调用查看结果
    6 Z7 M1 |9 _4 _# [/ N0 ~
  18. echo scerweima('https://www.baidu.com');& {: z  k% G4 \. ]% ?5 ~, Z1 u! }( c% }2 A
复制代码
2. 在生成的二维码中加上logo(生成图片文件)" H: T! O) C+ i9 T$ s* z) `  R) h7 {
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    : Q* _$ w. w( S" k" F) V2 A9 C# C
  2. function scerweima1($url=''){+ s9 f" Q9 o; k# Q
  3.   require_once 'phpqrcode.php';
    . X# }1 ~5 b% @8 h% ^
  4.   $value = $url;         //二维码内容" Q+ d9 t- W; q
  5.   $errorCorrectionLevel = 'H';  //容错级别8 ?; q9 \" n0 R! {7 |" x
  6.   $matrixPointSize = 6;      //生成图片大小
    + d( c) ^: h; S( d
  7.   //生成二维码图片
    8 P- S% |- ?( m/ S3 }
  8.   $filename = 'qrcode/'.microtime().'.png';: h( C: o7 p, M, D$ C5 N
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);, m6 s! l# F" I; N* z
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片( f* T- u. r3 V6 [$ X
  11.   $QR = $filename;      //已经生成的原始二维码图
    , G% A1 T5 `. G6 T) q9 H6 N, m4 |
  12.   if (file_exists($logo)) {8 y; A# p+ l, q( q6 L
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。. v: F4 j! B# ?1 r5 S6 K2 V1 b6 h
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
      V9 u/ U% g1 u2 b
  15.     $QR_width = imagesx($QR);      //二维码图片宽度3 x! g5 ]$ h9 n" V
  16.     $QR_height = imagesy($QR);     //二维码图片高度% ~( ^' u+ K, \. J" }" N7 q
  17.     $logo_width = imagesx($logo);    //logo图片宽度8 v4 D" ]4 o( `* B& m7 X, ~
  18.     $logo_height = imagesy($logo);   //logo图片高度0 h4 J& N  x/ J8 m
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    ( o+ S" B7 z! i1 v5 X) q
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    7 _$ O* P$ M5 O( d8 f, U
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    4 m6 a) J+ d; }  O
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点0 N8 R  r3 u- a! ^
  23.     //重新组合图片并调整大小
    ) ^2 t* \8 q! J; l1 m! m  N5 B
  24.     /*; b$ h+ E+ j# }+ H
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    * G; I, S# Y3 P1 |( @' v& c  ]
  26.      */
    + P- k+ N4 z% `) O% E% Q" a
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
      W. ^) w. B$ ?* s* E
  28.   }
    5 z% U8 B' P' t1 ]
  29.   //输出图片
    / c2 F; M/ V5 Y8 k" ^
  30.   imagepng($QR, 'qrcode.png');3 N, _" R4 s1 M0 j8 u
  31.   imagedestroy($QR);( i8 n7 t3 N( U1 N7 J+ c
  32.   imagedestroy($logo);2 Y0 o+ o- Y" w+ ^
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';) A0 Z' m) ?0 n! g
  34. }
    ' \4 p8 E" I6 X5 [) L2 n" l8 q
  35. //调用查看结果$ X' L! Y! P  z- w+ @
  36. echo scerweima1('https://www.baidu.com');
    - H) ?4 G! \* I7 C% b' T2 t
复制代码
3. 生成二维码(不生成图片文件)
) c2 p9 i' z! x
  1. //3. 生成原始的二维码(不生成图片文件)
    & }, f: r) B" y# c" R1 X- c6 I; k
  2. function scerweima2($url=''){  y' V8 b# j' w2 O  M5 |0 ]  v/ ?+ Q
  3.   require_once 'phpqrcode.php';; Z0 ?6 Z9 y5 w
  4.   $value = $url;         //二维码内容
    & h+ G* ^8 `# {5 g' T/ d
  5.   $errorCorrectionLevel = 'L';  //容错级别+ H+ u. Z0 _8 s' S" X+ i9 h4 }  A' ^
  6.   $matrixPointSize = 5;      //生成图片大小+ o) Q. e" j! M- t4 i& Q% c1 f% l
  7.   //生成二维码图片
    + x" i5 |7 Z" W9 }% `8 J( W; M
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);! X0 _2 m( \5 U( ?1 F9 E( u4 c4 ?! K* N
  9. }
      P2 o; P8 x; ]$ ^: T; o
  10. //调用查看结果
    0 O" I7 Q  ?. T: I
  11. scerweima2('https://www.baidu.com');8 |  p0 q# L$ R, Y- i6 S* @
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。6 q, [- G( f7 J4 f, t: }
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:+ g# S7 d1 ]) G$ F% L  _. j6 I
在线生成二维码工具(加强版)* X2 U9 `  [: E/ @6 B* x8 ?
http://tools.jb51.net/transcoding/jb51qrcode  h' j4 |* I" y; ^) _9 y4 f
在线二维码解码识别工具
2 v' n, Y+ L3 u* t5 Q
http://tools.jb51.net/transcoding/trans_qrcode
0 E3 {* V" C7 \$ d8 ~( ]5 ]4 q/ E4 W; b; V

; s5 J# z' c& E$ M7 P
8 q5 E! g/ ^7 d6 H/ S" ?* ], }! |  ?# v
( A" [* d3 g0 Y
0 B1 T  c2 B+ [4 n/ B4 U

最新评论

浏览过的版块

GMT+8, 2026-6-19 20:59 , Processed in 0.050747 second(s), 19 queries .

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