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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:4 H! ?( D5 e% r, U, O
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。* `: }0 L% z% T# D2 Z
前期准备:& G) U" H: J/ z* E
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
0 s! \% C& }* K/ f% _) k) A 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)* f: z8 I- J* g
方法解读:
- [9 w  D2 K3 V7 Y下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):1 u) r: h# d. h5 Q9 @" n% p
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    - a; |) J  g9 V; D) f1 s* z
  2. {8 n1 M5 R( H0 J6 G7 ~( f
  3.   $enc = QRencode::factory($level, $size, $margin);
    8 I6 b) \1 j' ~3 D
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);& F+ a. {; k4 \" ^7 `1 y- d
  5. }
    $ k- P6 x* ?: H0 J7 r
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;8 u/ A! T* t' ~& D
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;$ j9 T- F4 R& f8 @, Z* A
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
4 o2 Y3 c0 U: |5 U3 e- ]" R 第4个参数$size:控制生成图片的大小,默认为4;
" i- E$ [5 V; O' x6 B; U 第5个参数$margin:控制生成二维码的空白区域大小;. J) f3 F! x1 _! m4 h4 ]  ]) N
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;9 ~7 c" d6 `0 I0 U
使用示例:
0 I* E) s% o- P+ ~+ Z( E+ b6 S' T1. 生成二维码(生成图片文件)9 g8 o! A/ q8 t  I. A# t# K0 K
  1. // 1. 生成原始的二维码(生成图片文件)
    " O8 G* Y& x4 l' u% H# e% _
  2. function scerweima($url=''){: P# S; H, ?8 r- Z; J& x' ^
  3.   require_once 'phpqrcode.php';
    $ w& ^4 i' K; w, P0 F1 }
  4.   $value = $url;         //二维码内容) {, f3 B& V6 ^
  5.   $errorCorrectionLevel = 'L';  //容错级别0 h: P0 k$ u2 ?  p
  6.   $matrixPointSize = 5;      //生成图片大小
    ) T. d$ a3 U' Q
  7.   //生成二维码图片6 t. A3 L+ ]$ ]  ^
  8.   $filename = 'qrcode/'.microtime().'.png';. J- ]2 s8 }+ F9 _2 q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    3 @- [& ^  \9 @+ f" S6 }$ K
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    - D1 `* A6 f' k0 I. \8 F9 L0 c
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    0 h& }6 |" x. p2 o& m% m
  12.   //输出图片
    + {( T* [+ P+ X# z/ y% Z
  13.   imagepng($QR, 'qrcode.png');( H8 q( p* J* W2 m8 t
  14.   imagedestroy($QR);' z7 ]  x$ Z! r/ t
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ! m' h% H6 y. f$ d  Z
  16. }
    / n  d+ Q6 a* O: t& i8 l( s
  17. //调用查看结果" g+ {3 D  w+ ^6 b4 u5 N
  18. echo scerweima('https://www.baidu.com');
    0 ^( }3 l2 F9 [; `) {
复制代码
2. 在生成的二维码中加上logo(生成图片文件)% k7 ]6 e5 V6 ^9 s
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    . H( `% \) m* Z8 [& w* _* U8 t! |: \
  2. function scerweima1($url=''){
    3 J- @( p0 a9 G8 u: c- F
  3.   require_once 'phpqrcode.php';; x2 K) \0 B3 f' f- f8 b. B
  4.   $value = $url;         //二维码内容
    / U! b$ b& M' z$ M9 l
  5.   $errorCorrectionLevel = 'H';  //容错级别& E' ~. U7 j3 b& |* t( Q
  6.   $matrixPointSize = 6;      //生成图片大小
    " V. D2 z( s6 j1 o! _8 H! _1 {
  7.   //生成二维码图片  j; R2 j( Q% f4 x9 f
  8.   $filename = 'qrcode/'.microtime().'.png';% D  }# @% l6 v1 |* c
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);( o. p9 A$ H) K) O" r% m- `+ O2 R
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片$ x' O) d8 E3 j- R" A2 [. y: M
  11.   $QR = $filename;      //已经生成的原始二维码图
    $ e0 C3 z3 ?" j5 [) C* L
  12.   if (file_exists($logo)) {1 @, }+ p& U! n2 a; g
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。/ a3 G( ?: K  {5 y
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    9 N( q8 `( T$ e/ g( R7 A# m6 c
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    2 f# r4 a7 T6 ~  W  j6 e
  16.     $QR_height = imagesy($QR);     //二维码图片高度# o/ c# t" J# n! b" @. t/ G- g
  17.     $logo_width = imagesx($logo);    //logo图片宽度* q3 n* Y$ m7 U3 F
  18.     $logo_height = imagesy($logo);   //logo图片高度& Y0 U, s: u0 {% T5 Y1 r
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    1 C0 \% X3 V! o# e$ z8 R1 G
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)7 q0 I- e2 l) Y
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度. F% ~. ~+ L8 [4 ?2 C
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点4 G1 s5 B8 W! E' I% F
  23.     //重新组合图片并调整大小) N8 a/ y- [9 }
  24.     /*3 \9 J/ Z' j! q# }& ]
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中) [$ L' h- H! l3 a4 g4 B0 g5 s
  26.      */3 _1 [" k' ?/ w: m
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);% H- Q2 S  j/ k" N
  28.   }! X3 a  X8 D" q1 l" U  ]- R, C  W
  29.   //输出图片8 T0 i$ E- |/ N
  30.   imagepng($QR, 'qrcode.png');
    + t% l5 Q8 ]% J* C9 y
  31.   imagedestroy($QR);
    1 ~9 w; e5 q# K4 ?+ j
  32.   imagedestroy($logo);
    " X  k- ]" {* f6 U' R
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    6 `8 O9 `) {* W9 [2 w) S1 m
  34. }
    ! Q" f$ z# d* u4 q0 m5 v  P& Q, z
  35. //调用查看结果
    7 Q* i" P" `" m! ~& y5 l
  36. echo scerweima1('https://www.baidu.com');
    % N& `% O( ~4 r( `; d2 K
复制代码
3. 生成二维码(不生成图片文件)
" S8 D) w: v$ |! I) X3 r+ Y. r
  1. //3. 生成原始的二维码(不生成图片文件)
    / I$ A$ n/ t* O7 [; o
  2. function scerweima2($url=''){* C* A* U* d$ U4 P  `6 k
  3.   require_once 'phpqrcode.php';
    . P* H7 B9 w$ X, [7 q7 n
  4.   $value = $url;         //二维码内容
    ! m0 p/ c6 Y: F0 w; Q2 q; J
  5.   $errorCorrectionLevel = 'L';  //容错级别
    + R8 U+ @8 Z* ]& Y
  6.   $matrixPointSize = 5;      //生成图片大小
    5 W* j+ K- N& q- o
  7.   //生成二维码图片5 C( j' u9 C; u8 ~' W3 h
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);& S) f" _6 X5 f% f
  9. }
    6 N, H  k/ J3 b0 L5 _0 \9 }
  10. //调用查看结果
    6 R8 S* c" q& r2 [! h
  11. scerweima2('https://www.baidu.com');$ K0 g& W0 F1 K  A/ f% N8 V' ?7 F6 D" B
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" L! d5 s6 ]: o0 c1 Z$ \  zPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:& v& q1 l7 s5 ~* |! P
在线生成二维码工具(加强版)* w9 I; @0 k* b
http://tools.jb51.net/transcoding/jb51qrcode
) g$ j) P* ^5 y2 I8 w- d0 V9 k3 q在线二维码解码识别工具! E8 @  X4 u! K' [( W- ?, l# e+ }
http://tools.jb51.net/transcoding/trans_qrcode
! d' A% w$ b, v$ m" r' P) [& G) J/ _
* E6 M; Z5 J2 s0 ~" i) z

( e. T- _3 m5 E" r
2 ~$ m- i# k6 V& Y% F
1 G8 m2 T0 W" d" Y+ T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 12:32 , Processed in 0.112839 second(s), 19 queries .

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