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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:( o& g) w& L8 W& l( m: R1 i; t
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。2 ]5 Q) [; Z- x  C+ A9 M* a+ j% t- f1 q
前期准备:
/ j9 P* z4 e7 x2 V* v- T# q1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/  f( `$ i  @: e% f* m' _5 u
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
0 }- ], Q9 \2 K方法解读:/ @, a( P$ j( I6 ^4 Y; u8 ~
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
$ V# {4 \/ L. Y: f0 n7 z0 R+ `. ^
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)* b5 ]: S7 o3 S1 A* H
  2. {
    # e; m' L2 J. A: I: x
  3.   $enc = QRencode::factory($level, $size, $margin);
    " e2 m* t1 e; @
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);$ f& P9 T- J8 J( l" X8 P
  5. }
    4 u* y8 G5 B3 A0 d9 L0 F
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
; V' d3 T6 q( `4 }$ \ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
! Q& p# u: W% X2 M; A9 {0 Z 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
1 M) T) h1 h# x/ D; T$ Y, h 第4个参数$size:控制生成图片的大小,默认为4;
* I8 M. s" E  S( C; H 第5个参数$margin:控制生成二维码的空白区域大小;
& n3 `- O$ n# r# G 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
4 G. r* u6 Y8 v9 y; N, l( E使用示例:% S$ Y, Z0 z# I+ |' ]
1. 生成二维码(生成图片文件)* t, }1 ^0 j# Q4 o! e% ?
  1. // 1. 生成原始的二维码(生成图片文件)! z& m: w4 U' P9 O) \1 q
  2. function scerweima($url=''){
    0 ~6 W; i, Z4 S2 v" [' i6 U6 I
  3.   require_once 'phpqrcode.php';+ D, i4 D5 b9 \/ v% o
  4.   $value = $url;         //二维码内容
    7 ]9 }. Z- j$ o  h9 {2 Y
  5.   $errorCorrectionLevel = 'L';  //容错级别& q, `' F: M% ~6 }
  6.   $matrixPointSize = 5;      //生成图片大小
    - p+ x# D2 S) a- ]% R7 k
  7.   //生成二维码图片4 d; L, a( n+ w* C+ `) A
  8.   $filename = 'qrcode/'.microtime().'.png';* a3 G4 {/ O3 `& X+ J
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    + n6 q1 o, U+ N9 g* s/ ^' c6 Q
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    * d0 I& D" p5 p" B1 A
  11.   $QR = imagecreatefromstring(file_get_contents($QR));0 M* \! z. |% u1 ?
  12.   //输出图片
    0 E0 f8 W3 {2 M  F4 v
  13.   imagepng($QR, 'qrcode.png');
    5 p2 H  k0 C. m+ L
  14.   imagedestroy($QR);
    & K4 G2 u5 R6 B" C
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';+ b: O. o8 Q8 B$ m- a* U: J9 x
  16. }
    7 f+ f0 l! [* z+ j9 w) e5 a5 A
  17. //调用查看结果' |8 K9 H4 f, }: X. d
  18. echo scerweima('https://www.baidu.com');0 F6 k6 j( l; b6 z/ P1 W& Q
复制代码
2. 在生成的二维码中加上logo(生成图片文件)8 K- S& y( |" w4 F) B, s" S
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    . q* ?" l9 ^/ p& D' @7 Q
  2. function scerweima1($url=''){* d- }  _' @2 |: t
  3.   require_once 'phpqrcode.php';" i9 l( ^. b# U" D" K$ O  P
  4.   $value = $url;         //二维码内容
    9 N3 A5 p! x+ U: A+ j! O
  5.   $errorCorrectionLevel = 'H';  //容错级别
    : I' ^6 [  {' M" D) G1 i
  6.   $matrixPointSize = 6;      //生成图片大小7 ]0 N5 k& Y" Q( V
  7.   //生成二维码图片0 E& y" m7 ?& \" Z6 o8 |, I8 e
  8.   $filename = 'qrcode/'.microtime().'.png';
    $ Q$ @2 L8 f- _, v! L
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);: n0 A" G7 J* W9 V% u0 K6 w
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片9 B4 ]( C8 y+ s3 {8 e
  11.   $QR = $filename;      //已经生成的原始二维码图
    3 g2 B2 m) N; d  X, ?5 u, t
  12.   if (file_exists($logo)) {* Q8 s" B! @9 F( {4 K! F
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    1 |6 o9 c& T- Y! m( |/ _1 B/ R
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    % m$ d8 w& h5 m
  15.     $QR_width = imagesx($QR);      //二维码图片宽度6 H8 e+ f; F  G: h- a3 h+ O
  16.     $QR_height = imagesy($QR);     //二维码图片高度3 L( M/ P) R" \( O. Y; O0 h
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    7 F. h# ]2 H" R, h4 e' s$ V3 S( D
  18.     $logo_height = imagesy($logo);   //logo图片高度5 p. \, `: P& h) b+ P( C6 ?6 D
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)/ [4 }  y4 k! ]) l4 q0 i# a
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)- ~! x) q' A! S
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度! w9 m1 h* n% t* f
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    $ ]: E- N/ ~1 b
  23.     //重新组合图片并调整大小
    ! v) [7 N! ]: z5 L+ ^1 f2 \
  24.     /*
    6 P3 `  `& m$ M8 s% p
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    : O( y+ r: E3 g2 i4 K. n
  26.      */& w0 d9 E6 Y& R1 Y- r4 j
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    7 o9 B2 O* q4 p2 G/ t# h5 m) Q
  28.   }) `* b  r: K9 q
  29.   //输出图片  m& `) {5 {. \$ B1 G
  30.   imagepng($QR, 'qrcode.png');) E/ ~# U  N( Z' J# \; |" G
  31.   imagedestroy($QR);
    8 c8 W, q4 R5 B4 q* f& m, r+ ?
  32.   imagedestroy($logo);# v7 }" s1 I7 r5 o' j6 }
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';  a2 m  W- b# ?1 U; k
  34. }
    . P- O7 c2 R& ?- O+ E; S
  35. //调用查看结果
    # p; ?- f% ]# t8 X
  36. echo scerweima1('https://www.baidu.com');$ q/ p, g+ Y0 P+ T
复制代码
3. 生成二维码(不生成图片文件)0 Q& p! t/ {) u  F# n
  1. //3. 生成原始的二维码(不生成图片文件)
    & g' s8 g% c  a+ ^' ~
  2. function scerweima2($url=''){
    - s  l$ n' q& K7 A+ S
  3.   require_once 'phpqrcode.php';- Q7 t: _* Y+ r7 x# x2 D4 E
  4.   $value = $url;         //二维码内容
    6 A0 ?# Y/ w+ \+ m
  5.   $errorCorrectionLevel = 'L';  //容错级别; }1 E% q; I* M# t
  6.   $matrixPointSize = 5;      //生成图片大小8 v* h* p3 s9 o
  7.   //生成二维码图片
    / Z* B" n6 R' l4 H7 m' i) q$ T. L
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    4 y2 L7 G4 ~# E7 h) K5 c
  9. }2 [, M2 @  I9 r* N8 y' n
  10. //调用查看结果
    # U5 T" _- p4 s5 x
  11. scerweima2('https://www.baidu.com');6 y9 z3 w) R6 u7 ?1 J1 [  h
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
% ~+ |1 j/ V% _  O+ S( [PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:# u7 [( R7 I/ M: \
在线生成二维码工具(加强版)
. K; \* b3 w2 U+ [, I) T& S
http://tools.jb51.net/transcoding/jb51qrcode
- A% ^# O- f6 H在线二维码解码识别工具
3 D/ X9 g+ H7 \
http://tools.jb51.net/transcoding/trans_qrcode
! v$ l! I. k8 o6 G. ?( q$ g1 q; \* E  X
' {: G8 N& A! \( `% K+ U

) j9 W. o6 k; R( Z1 Y$ ]3 R6 B
& g- ?5 n1 q! S. S3 S5 @" t6 ~: P+ P6 U! w( R  Q1 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 21:05 , Processed in 0.055552 second(s), 19 queries .

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