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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
2 u6 a# Q& O0 M! p! B使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ }/ v0 o! @+ B# ?前期准备:
# `, s* h. s8 t: b4 C; G1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/5 A) P" R, N4 A+ |
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)+ W' X7 m3 E) b) E0 W& N" m3 {2 \/ j
方法解读:
# }6 m, ?. W6 u9 [4 `下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 F4 o& W) a6 I6 m
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    7 V" s' _( H/ @- ~$ g/ e& P
  2. {; p' q! w/ `7 f& G7 a# O
  3.   $enc = QRencode::factory($level, $size, $margin);2 n. r. Z) X( X* P( r) H: T  \9 i5 P7 }
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    " [( Q3 w# y% n# Z& ]
  5. }
    1 \. V; S+ |' U. q
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
/ R/ h, T5 V/ n! M1 X+ Z% B 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;0 ?; P; B: H/ `: a8 s+ i/ |4 q6 W3 c
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
- d7 W7 U: }6 O$ E 第4个参数$size:控制生成图片的大小,默认为4;+ Z+ O& |' s0 g
第5个参数$margin:控制生成二维码的空白区域大小;
8 ~0 O& L; A# u& |; W5 W 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;" g& }3 @$ B$ J( \
使用示例:9 {7 t" z( @  b* @
1. 生成二维码(生成图片文件): D3 c% k* n! l
  1. // 1. 生成原始的二维码(生成图片文件)
    # Z5 J+ T3 @& A* P
  2. function scerweima($url=''){
    ; f9 s* P" N* f
  3.   require_once 'phpqrcode.php';
    / C* }. s$ S0 a( M
  4.   $value = $url;         //二维码内容
    0 `( |3 ^7 F1 `* b
  5.   $errorCorrectionLevel = 'L';  //容错级别
    , ?) u, H& v5 [$ k% N$ I; ]# E& @
  6.   $matrixPointSize = 5;      //生成图片大小
    , l+ W9 |/ ~1 E$ R* s
  7.   //生成二维码图片" V; F5 B  X# r
  8.   $filename = 'qrcode/'.microtime().'.png';& S  z+ B6 u- q) A9 `5 j; `1 {( W
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);# y4 i- H& W$ O4 Y& h, K) @
  10.   $QR = $filename;        //已经生成的原始二维码图片文件2 N9 K$ @* A0 Z
  11.   $QR = imagecreatefromstring(file_get_contents($QR));5 q9 x1 r- a1 w/ M* ?
  12.   //输出图片# Q8 h; G  [) S3 O+ X+ m% ^& t
  13.   imagepng($QR, 'qrcode.png');8 w5 `" I& `: d! o# C% {8 {6 m; j
  14.   imagedestroy($QR);2 n/ N+ `* A" x6 A; A! H
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';/ g+ d  r; W8 F' p
  16. }
    5 e! j5 e  O4 b3 F3 G
  17. //调用查看结果
    * u! j7 k7 X& c* @
  18. echo scerweima('https://www.baidu.com');
    6 i' B8 {3 Z7 t+ x+ g9 c* F: H
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
1 B( R" l! X8 h( g6 k5 K+ ~4 [
  1. //2. 在生成的二维码中加上logo(生成图片文件)9 u& e- z4 g# H0 M, u: g4 N- t
  2. function scerweima1($url=''){
    ( S% W! I* Y  A0 }6 o1 b( i8 D
  3.   require_once 'phpqrcode.php';
    + q1 s# K! s  j  ~
  4.   $value = $url;         //二维码内容
    7 I! `2 J8 Y  m: V( m5 }' m9 B
  5.   $errorCorrectionLevel = 'H';  //容错级别4 Q; P7 N6 L. [( ^0 T
  6.   $matrixPointSize = 6;      //生成图片大小' n' C7 p. s7 e
  7.   //生成二维码图片
    ( _' {, T) t" T1 {7 i6 p- t
  8.   $filename = 'qrcode/'.microtime().'.png';
    8 R+ q( ~8 o* }+ e
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    % }6 ^5 j  d; n
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片8 X5 j+ [7 d' y* q9 M/ Z5 I- L4 W
  11.   $QR = $filename;      //已经生成的原始二维码图
    0 Q5 h6 a. @* q. i, k  U
  12.   if (file_exists($logo)) {
    % I: o( C- b( e8 a4 t3 F4 s' T
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。) c7 N" |6 R- T. h
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。# u; \, f0 E5 e
  15.     $QR_width = imagesx($QR);      //二维码图片宽度( c" u. p% J+ d  h1 M' E
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    4 J7 h6 N& |  i+ Q% D! f& D8 ^8 a4 P! k+ y
  17.     $logo_width = imagesx($logo);    //logo图片宽度( k6 G# j0 o& q/ C2 O: x
  18.     $logo_height = imagesy($logo);   //logo图片高度- T2 u9 v5 W; w& H( s0 s
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)$ r% P/ z7 V: L$ [5 u. v8 x6 x# O* t& v( X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    8 |6 \# z9 a. e- u. l
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度3 j  a+ Y0 b# C/ g6 t
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点. f- V5 t" B3 j4 F9 ]% ^
  23.     //重新组合图片并调整大小  q" _; y# r8 f; W$ J# ~1 s1 ~
  24.     /*2 ]8 m1 ?/ ?5 L6 \& M8 G
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中1 `* _3 j; T3 E3 u
  26.      */
    # b; C; B/ O* {( f
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    / q4 C% ^! P' m- i' q; R
  28.   }
    9 g$ Q9 B+ m* q+ D2 m9 I
  29.   //输出图片1 S7 W; ?  A" Y, Y9 e/ `+ s
  30.   imagepng($QR, 'qrcode.png');
    ' ?0 N( _% @/ y2 \, G
  31.   imagedestroy($QR);
    $ `) P- j2 {& {8 t2 g" B
  32.   imagedestroy($logo);
    : U% F4 ~- F/ r, ]1 L
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';5 C+ K' {1 O% {# J. n
  34. }
    1 @7 ~/ Y) P# S+ a  {
  35. //调用查看结果
    5 L; L2 K0 i: @1 f4 j
  36. echo scerweima1('https://www.baidu.com');
    / s0 a, M/ ~# \) h) W4 s
复制代码
3. 生成二维码(不生成图片文件)
, c& x, m8 C9 b  Y! P
  1. //3. 生成原始的二维码(不生成图片文件)4 X+ @# V  B/ I8 E5 s! n
  2. function scerweima2($url=''){
    2 ~8 u* t0 B; A3 f! P6 W  s% u# C5 q
  3.   require_once 'phpqrcode.php';
    : B( }) t/ j  f. @6 I9 G+ j) K
  4.   $value = $url;         //二维码内容6 U. V1 l* Z0 p) B8 S. f
  5.   $errorCorrectionLevel = 'L';  //容错级别
    . I' O2 z8 {% l
  6.   $matrixPointSize = 5;      //生成图片大小
    2 g  \; t! {- o# i. j/ e
  7.   //生成二维码图片
    , M6 `' s  C( P5 U
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);/ D9 V9 O9 y( A9 j) {
  9. }
    $ N* M& H$ l  q& A  N
  10. //调用查看结果
    ' _: H1 Q$ K  P% t- [# v" A! d2 D. t. I
  11. scerweima2('https://www.baidu.com');5 i8 r. U1 n9 R# s& v6 u
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。# C0 x" R- H; l/ b2 i2 ?
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:  X! }' y, Z7 n
在线生成二维码工具(加强版)
4 j9 s  C/ y* i/ s- Y8 J
http://tools.jb51.net/transcoding/jb51qrcode
6 A' p/ ?+ t7 S* z/ y& p+ S' n在线二维码解码识别工具( I2 g5 K7 {7 E
http://tools.jb51.net/transcoding/trans_qrcode; S8 Z. M9 |4 Z7 w( n6 f
2 K" Z! `- j& j" Z, G

+ g( p* n; S( Y4 g$ D* }
' V' @9 |& ]1 r) \
! |* H+ \( J! v) v9 V& R6 L. B5 E9 A! ~+ H, B; I# C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-6 01:51 , Processed in 0.122572 second(s), 21 queries .

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