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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:9 {$ P  }9 v9 N' u
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
- k& @- w' {3 i8 }* R前期准备:2 }( r/ {, B. L7 l8 E! A( f
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
+ {' o( X+ d# e' J 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
+ [) `) x4 i. i1 o- d( e3 v2 U8 E方法解读:' g! |' N5 `# U: }
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):1 u# O8 P  L) ^2 i4 ]! }$ u
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
      K0 n$ T! f' m+ U3 f6 _0 o; g4 d
  2. {
    3 Q' r! m0 S" ?6 e8 d
  3.   $enc = QRencode::factory($level, $size, $margin);3 o, ~/ M$ m! L, ]5 ?
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);+ z" E* `5 Q3 _6 L
  5. }
    & \+ M/ f6 K; j. b* z
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;# i5 o  G( S) Q* Y
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;# ^. k  Y' |7 T$ h
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" Y$ m' l! P2 m- e, ^( @
第4个参数$size:控制生成图片的大小,默认为4;% f7 a* N) L. r9 ?- ^& F
第5个参数$margin:控制生成二维码的空白区域大小;
3 k! ?5 W- f% W- V8 J 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;0 G3 S4 G$ i6 {6 n2 T1 ?
使用示例:
6 [; u" y& U& S* _3 }# s1. 生成二维码(生成图片文件)1 f  M. q; ?* d3 B( m2 R
  1. // 1. 生成原始的二维码(生成图片文件)& e& }! v5 i9 h! X
  2. function scerweima($url=''){
    / e2 T! W  t; w9 Q  }
  3.   require_once 'phpqrcode.php';( M& j5 j0 Y" f: @
  4.   $value = $url;         //二维码内容
    4 x- l- B3 P* k+ U  O
  5.   $errorCorrectionLevel = 'L';  //容错级别
    / ]3 f) o2 b; _) \
  6.   $matrixPointSize = 5;      //生成图片大小$ ], h) m" b9 {$ \* [) y* [6 y4 H/ w
  7.   //生成二维码图片2 b) A7 x7 r3 X/ m& B/ w
  8.   $filename = 'qrcode/'.microtime().'.png';
    ; |$ Q! v6 x  n) c( i. Q/ Y
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    " _% T  u1 `  v/ A7 S/ W; `
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    % ^1 S1 h2 r& U! A7 |1 m2 P
  11.   $QR = imagecreatefromstring(file_get_contents($QR));: B8 a; o; d" _7 \
  12.   //输出图片) i5 |/ J" ~5 p- n
  13.   imagepng($QR, 'qrcode.png');, s. }7 H7 F% u5 Q
  14.   imagedestroy($QR);! U  d; k) J4 U/ C' s! X
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';$ d; L0 @0 D# n3 [, |3 E
  16. }  H5 _8 l6 m2 g, N8 K% D: I+ h
  17. //调用查看结果( u- N! z. U) D. g7 b
  18. echo scerweima('https://www.baidu.com');
    5 x1 p$ w" Y1 g! B
复制代码
2. 在生成的二维码中加上logo(生成图片文件)* v/ Y& r8 \; O0 u) M* D
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    7 t9 Y3 l8 P# z9 _$ f4 D  a2 ?" ^0 z
  2. function scerweima1($url=''){$ g4 M9 J" I& z- K# }3 |# Y' s6 K
  3.   require_once 'phpqrcode.php';
    / T, g7 ?3 [7 O- s9 u
  4.   $value = $url;         //二维码内容1 _. `: z+ g% j3 d  `( N
  5.   $errorCorrectionLevel = 'H';  //容错级别1 k. I8 D0 f# e
  6.   $matrixPointSize = 6;      //生成图片大小& X$ v, j( j7 a  t6 V
  7.   //生成二维码图片
    6 R8 Y3 J5 l# F
  8.   $filename = 'qrcode/'.microtime().'.png';
    ) C: N" G  n$ [
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);8 i/ U  e5 R  p1 c/ \: L
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片6 F8 A  @4 u: @; R4 |
  11.   $QR = $filename;      //已经生成的原始二维码图
    ! R- N$ A& s6 d6 x8 `) Q4 i
  12.   if (file_exists($logo)) {
    5 O& b- f- g* a5 |: ~
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。, s, L9 ]7 ?5 ]  m2 G1 b
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。4 @. A5 j8 u7 n6 C9 C9 H5 w# M
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    7 z$ Q0 j) a& y: f( ~, c
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    7 E( z+ i0 o  x1 S; R2 n" U" [
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ; ]2 @0 D6 d+ \% f
  18.     $logo_height = imagesy($logo);   //logo图片高度
    ' H/ ]5 m2 g7 ~3 A# y, B
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    1 h- Z: N5 ^) e, l5 A+ g7 R( Z
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
      I- j& P8 K+ o! y7 }, X3 D; o% s# {
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度/ ^, ?; U6 P  N0 F4 y4 F. @4 j0 V& q
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    " [6 p' @: s/ U/ B  w' k, |
  23.     //重新组合图片并调整大小
    $ T; v# T+ B# S' X2 R9 G
  24.     /*, |! n- W! _( e" H2 \7 H
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中8 ^( e% }; k; ]* h. J" Y" w
  26.      */6 _# l0 H' M! J6 {# l4 X) k
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    % o9 Q7 Y# v" u# D; X, {
  28.   }
    ! j- Z& A  ^& j1 ]- j) X
  29.   //输出图片
    7 G/ X2 F$ @9 l3 C. _
  30.   imagepng($QR, 'qrcode.png');
    0 |, _( g' H3 [) V' s5 A. R
  31.   imagedestroy($QR);9 h* w7 U8 a8 a/ T
  32.   imagedestroy($logo);3 T# y! U4 ]  w* ~4 _1 f6 V- }" w
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    & n( b3 b# _) @; M/ @$ g
  34. }( i0 R8 k% d# j6 L' x
  35. //调用查看结果7 ^$ X$ s. b$ H/ Y( M, e
  36. echo scerweima1('https://www.baidu.com');
    # r. i' P, N* {
复制代码
3. 生成二维码(不生成图片文件)
4 M, F* ^& ~: }
  1. //3. 生成原始的二维码(不生成图片文件)
    ' l" m% T2 F5 j% z" U; G
  2. function scerweima2($url=''){
    3 W  {4 g/ g4 j$ v8 Q' ^6 f
  3.   require_once 'phpqrcode.php';5 z, j  H: Q! Q- ~2 L* [; e; T+ j
  4.   $value = $url;         //二维码内容
    / |& K3 ~. c: S( \3 ]
  5.   $errorCorrectionLevel = 'L';  //容错级别1 _7 i2 E' g, K/ u; d+ E
  6.   $matrixPointSize = 5;      //生成图片大小8 h! s6 ]! [3 G- u, x
  7.   //生成二维码图片
    + t0 W7 {0 q$ j$ {
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);' {6 V& O0 h/ K; R! d7 q9 y
  9. }# r2 @7 {; m5 x- ^% w$ G
  10. //调用查看结果
    $ ]+ K! x4 p  {# T: Y$ N
  11. scerweima2('https://www.baidu.com');: U+ P9 t* v9 J5 V# _
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。0 p( H5 U2 x+ S/ p
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:$ b; g( Q* v$ E& r
在线生成二维码工具(加强版)
$ {# R' g( N( z3 F1 P1 G, K# p
http://tools.jb51.net/transcoding/jb51qrcode$ k7 e3 `/ }1 J
在线二维码解码识别工具
0 G7 Q) B, Y+ g# `7 [0 B
http://tools.jb51.net/transcoding/trans_qrcode
4 }: V0 X+ ?" H$ i9 d# ~3 w+ e% y. ?( Y1 A* k: ]
: K$ Y" t1 D" ?7 A$ f( q
/ \5 ]4 M4 A+ S/ ^6 d" w0 T2 r
& d5 R3 l$ @0 }# g7 c- ~

+ R& O4 s* u5 ^4 `$ f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 16:33 , Processed in 0.122318 second(s), 19 queries .

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