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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:. q0 M# V/ O) K6 b$ ]# O
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
# ?4 t3 ]/ x0 O前期准备:. |0 R8 A9 X- Z
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/3 J9 u8 \2 x: q1 H7 A4 J' k
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 l8 _: g# J1 b* R3 n
方法解读:
7 i. m6 r( s& T. h& ~3 C& N* n3 ?$ Z下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
% G+ k" Q% x9 ~& G
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    2 x# |; e- X" I
  2. {2 x- w/ t7 w( x- h( H' {" h
  3.   $enc = QRencode::factory($level, $size, $margin);( @' Y/ _5 H3 j$ r
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);  {; a- K+ R- _; k( H; }( Q# m
  5. }
    ! l+ ?/ E' J2 [. z1 T* c, Q
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;0 o0 K; q5 P* N( C7 `
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
& j, x' ~; O6 z" z 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;& P1 S+ u* Z$ p' d
第4个参数$size:控制生成图片的大小,默认为4;
- Q2 Z) B) L' s9 c7 j, m 第5个参数$margin:控制生成二维码的空白区域大小;
2 z& x/ r6 c) @5 a, D 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;: i/ s  [& `( e, J% y
使用示例:
+ f1 L% N2 ?0 v8 d2 ~# {# m1. 生成二维码(生成图片文件)
" P6 \1 D. P! {; A9 I
  1. // 1. 生成原始的二维码(生成图片文件)
      r" |6 e5 L  |
  2. function scerweima($url=''){
    ' Q$ u  ~* m% O" H' G, d
  3.   require_once 'phpqrcode.php';  `8 Y0 D, p* U" p# C- [' d
  4.   $value = $url;         //二维码内容
    ; B) s2 R0 L5 c6 }
  5.   $errorCorrectionLevel = 'L';  //容错级别
    $ r- r3 |) }1 J
  6.   $matrixPointSize = 5;      //生成图片大小
    ) H5 ?! `0 H/ q; K7 w; q
  7.   //生成二维码图片
    1 y  f- [8 i5 b5 A. S. D" W* L- K$ m
  8.   $filename = 'qrcode/'.microtime().'.png';
    8 a9 N0 ^$ Y/ [( m8 N2 Q1 _
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);4 e: @2 l& Z1 Y+ U' v
  10.   $QR = $filename;        //已经生成的原始二维码图片文件+ K0 e# t0 o& z6 I; F, W
  11.   $QR = imagecreatefromstring(file_get_contents($QR));4 e, y8 y: m1 h' |* U
  12.   //输出图片
    ( K9 Y& w) n" M7 N, o
  13.   imagepng($QR, 'qrcode.png');
    * [9 M" M! t+ v8 Q
  14.   imagedestroy($QR);
    " ]2 a! l  S0 M. a! V  i
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    8 K' M% S6 [. O5 W& ?
  16. }
    0 n0 s  T: {- C1 |
  17. //调用查看结果
    7 O1 V" p, [3 g. i
  18. echo scerweima('https://www.baidu.com');
      J% v1 W8 j& n, ~8 l
复制代码
2. 在生成的二维码中加上logo(生成图片文件)  j' u6 ~+ ~. s+ [- w
  1. //2. 在生成的二维码中加上logo(生成图片文件)6 B2 l- Y' j3 A! ~, k3 I7 }3 o
  2. function scerweima1($url=''){
    ; c% {+ q, J/ e- _2 C; o
  3.   require_once 'phpqrcode.php';
    3 E$ l) k8 |$ S8 _; A% P: F, }- t. d1 g
  4.   $value = $url;         //二维码内容+ ^& b$ o- V! i. P# E
  5.   $errorCorrectionLevel = 'H';  //容错级别0 u, t' v/ p) u% @
  6.   $matrixPointSize = 6;      //生成图片大小
    ( M; W1 t& Z4 ^1 `+ y
  7.   //生成二维码图片
    : d0 }8 E- c* K5 S7 _
  8.   $filename = 'qrcode/'.microtime().'.png';% ?! v/ z. i8 K. M4 g
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);& G9 s2 s6 X% ?; k
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    2 ?2 H0 Q8 i2 }
  11.   $QR = $filename;      //已经生成的原始二维码图
    * n* X( Y* f) b; E. l0 T
  12.   if (file_exists($logo)) {9 p, I9 p# G9 V9 J8 ?" c4 G
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。. C; E6 ^( a/ Q- D" q4 e
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。- r: g% l6 }3 b' p
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    9 n9 y1 N5 }3 }+ o% V; m6 F1 x
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    , X! D; c: B) s! `+ w
  17.     $logo_width = imagesx($logo);    //logo图片宽度; n/ o% ]4 q$ a7 S- @
  18.     $logo_height = imagesy($logo);   //logo图片高度6 I: {( G* |# ?" j0 ?$ t
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    ( U6 G& Z! B' h- y7 Y: M
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)& v/ D% i0 y9 i
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ! \" Y2 w7 p1 M3 K4 d6 v+ O
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点; ]( ^! r+ q+ m4 ~. f  \2 r
  23.     //重新组合图片并调整大小  M  C8 h* R: f/ }1 z2 [
  24.     /*3 ^6 Z  w( s# }8 ?$ W, @& d8 m
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    . s8 w" ]7 N1 k) Z, S& e* Q5 M
  26.      */
    # Q6 }8 \3 {# K' v8 o' J
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);7 C. L1 D2 u# B$ R/ }1 H  n" X
  28.   }2 r: l' A" C- c) N. G& b( x
  29.   //输出图片
    & g0 |5 ?  Q* @+ \/ W# ~
  30.   imagepng($QR, 'qrcode.png');: C! e" D! j2 Z3 v) k/ T" G
  31.   imagedestroy($QR);! ]& k1 s& n- Y) ?1 x! i$ W
  32.   imagedestroy($logo);9 M" O4 F  M2 [2 u* B0 a/ r& T
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';8 C9 D, E4 g- y, Q0 `; P
  34. }
    . l$ ]4 k+ R! g4 `" H
  35. //调用查看结果
    : q& r9 {1 Z9 K/ l* _
  36. echo scerweima1('https://www.baidu.com');
    : V8 A( S2 L- p! d
复制代码
3. 生成二维码(不生成图片文件)7 h, l  M( S/ p" i5 `. w. I& K5 T
  1. //3. 生成原始的二维码(不生成图片文件); t6 |7 ~# G% A* |0 q
  2. function scerweima2($url=''){, Y2 w, [# D8 M  x) X+ k6 Z9 M
  3.   require_once 'phpqrcode.php';
    6 F6 M4 D) V0 f; y" i* ?+ N; ?
  4.   $value = $url;         //二维码内容- ^& Z" d( j' n' ~
  5.   $errorCorrectionLevel = 'L';  //容错级别0 e% U' U4 Z; [, j: r! @2 f
  6.   $matrixPointSize = 5;      //生成图片大小0 ~) A3 J9 h1 y, ^; E; C" M
  7.   //生成二维码图片
    : `) U) I1 y+ e5 n7 K6 v
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    . `% K% h6 L0 B9 x7 I; w2 b' }
  9. }
    $ i2 ^$ G+ s1 l3 j- v4 U/ j; G' _; ?
  10. //调用查看结果+ I2 c& V) z6 G/ Y0 z. b
  11. scerweima2('https://www.baidu.com');9 a' b% c0 p% H& K
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( f/ h  y% ?+ }# c- |( [
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
( L4 w+ f" r; i% T: y# f4 W在线生成二维码工具(加强版)
( y( L7 }, ]# j* i1 y. d+ j7 h
http://tools.jb51.net/transcoding/jb51qrcode
& x( t, u/ Y: C- r在线二维码解码识别工具
, |/ b5 s: F2 }5 |
http://tools.jb51.net/transcoding/trans_qrcode
' i) {5 G0 X+ w  \7 V: q- ?% X7 T- p; I/ v

+ X7 n+ c" Q) X
" ?9 _" z' b  p7 p/ r6 R  M$ r: G5 }

6 l/ s- z- R# X$ l" K* I+ y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 08:10 , Processed in 0.064883 second(s), 19 queries .

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