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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
7 {4 {+ i- a2 D+ P" x( L7 R' ]2 H使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。- Z8 `+ E& i3 g9 A1 `- V
前期准备:
0 m, \0 J/ @* ]5 t3 Q4 a1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/+ l; |0 z: L* o, _
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" ]+ k( ^$ a( A! Y- O' C, u
方法解读:
  d1 g2 |* G0 R7 N+ O7 [7 K下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
' y7 ~" m6 ]) c1 B# M
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    8 `  P# z: v6 K6 U7 i# [6 z8 }
  2. {0 }' |9 ^" U/ `' N: v& X7 ?& ~
  3.   $enc = QRencode::factory($level, $size, $margin);# w) d+ \/ U3 S' A+ O2 E9 }
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    & b4 }7 d' P7 m9 O4 j
  5. }# W& v, q2 V- K2 {
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
  z! M0 J5 U' b# X" [. @ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
1 v7 x8 y+ `! v  U 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
/ \: n# E. R9 z; B7 h 第4个参数$size:控制生成图片的大小,默认为4;* ], O$ M% K& @* f* W. S5 L4 c
第5个参数$margin:控制生成二维码的空白区域大小;, F( w$ X& T  j7 m; T6 D$ e
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
& G) p8 l& b" M) G# J使用示例:$ a5 F7 i: k* j1 n
1. 生成二维码(生成图片文件)" f* X2 T6 Z6 c. Q- y* c& \
  1. // 1. 生成原始的二维码(生成图片文件)
    ' X$ G1 I' ~3 V( [! f
  2. function scerweima($url=''){
    $ R, I7 J% B; w+ K
  3.   require_once 'phpqrcode.php';: s; Q, V8 a# H' T
  4.   $value = $url;         //二维码内容3 ^3 v0 \' d* P) ?! p; F
  5.   $errorCorrectionLevel = 'L';  //容错级别2 F7 `- c% {0 {
  6.   $matrixPointSize = 5;      //生成图片大小" }. k2 ?# z/ \1 @, Z/ K+ ~
  7.   //生成二维码图片5 ~. h4 p1 B5 P; q; l; Q
  8.   $filename = 'qrcode/'.microtime().'.png';
    % a: M; o" M# h
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    1 f7 e4 v7 k0 l) O' U
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    6 B( J& D+ ~3 G
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    . }7 t/ @2 Q$ o! ^! v- A& B
  12.   //输出图片
    " w" h6 [" B+ M
  13.   imagepng($QR, 'qrcode.png');
    6 K* \2 P0 O- R
  14.   imagedestroy($QR);3 S" U) Z9 ]% u' O) C
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';# w- P) {8 U* H# y( A' O4 W* \5 z3 b0 @
  16. }
    ; V- H! j4 k5 C: Y8 O" {; H
  17. //调用查看结果, }" e7 S' C1 E! c! [; y
  18. echo scerweima('https://www.baidu.com');3 T! _2 m' o. [) s1 a/ M: |& h
复制代码
2. 在生成的二维码中加上logo(生成图片文件)/ y1 s. l# n) ~  w3 E
  1. //2. 在生成的二维码中加上logo(生成图片文件)4 P, b" |8 ]7 o. A# j; ^* \
  2. function scerweima1($url=''){
    / z. j& u" u5 r  b* i2 a
  3.   require_once 'phpqrcode.php';
    ) g& v" H1 H% J, S9 P
  4.   $value = $url;         //二维码内容
    # y0 I" b7 t6 ?$ g) }
  5.   $errorCorrectionLevel = 'H';  //容错级别6 f$ }* P" s4 ]; p" F
  6.   $matrixPointSize = 6;      //生成图片大小; ^3 d( }- E6 \
  7.   //生成二维码图片" W2 J  u1 J3 i0 w! k" q# r
  8.   $filename = 'qrcode/'.microtime().'.png';
    7 R3 V9 e+ S) d. i  T) e# p, k
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);. {  m" W$ _- g* U" @) x
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    ( t8 h$ N. N2 p3 T
  11.   $QR = $filename;      //已经生成的原始二维码图( ?( e/ Z7 A# j* L. ]' s) _
  12.   if (file_exists($logo)) {
    + F! N/ x" {! `# p
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    3 M- t! G4 j+ o0 }0 g
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    ) a0 e6 K! t! [* }
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    0 e5 w; ~1 `# i# w7 U6 o! t
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    7 F0 @% y* Y: l5 x& H
  17.     $logo_width = imagesx($logo);    //logo图片宽度- [! y5 Y+ Q) p
  18.     $logo_height = imagesy($logo);   //logo图片高度! U/ }6 j) @! S* y. }& |5 @# D' m
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)0 ]" D  p6 g3 _2 C& t- a
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)' F/ \9 L- p3 H
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
      A' j4 F/ W( h" I7 v1 ~
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点) b4 J( [! }/ o. t
  23.     //重新组合图片并调整大小
    2 X  @5 U! R7 z; }
  24.     /*) y3 r9 N) o2 I+ `$ G) Z* h% ^3 `
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中( e( R& D+ x7 _) L; w5 e# l) g$ Q
  26.      */
    ) P1 P2 F1 \8 }3 f
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    2 j, A" e$ s* X2 n- i  I) L( S
  28.   }
    1 @$ d1 s7 y' a% y- ]5 g6 ~+ q
  29.   //输出图片, H) U  x7 i( l- l. }  V5 k: a. f
  30.   imagepng($QR, 'qrcode.png');
    / r3 c0 P: i' O9 f
  31.   imagedestroy($QR);$ E+ }! G) |. T' s  j& s1 t
  32.   imagedestroy($logo);+ E* g! ]2 U% h+ Q) U( m
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';  t; T1 Y# S. W" B
  34. }* i/ Q0 X6 D5 W' v* h# [! h1 {
  35. //调用查看结果
    % N: S$ V& P+ e& z' j7 W
  36. echo scerweima1('https://www.baidu.com');$ A+ }0 h* q, q0 ^
复制代码
3. 生成二维码(不生成图片文件)
8 A3 @4 e8 r* k% `/ Y' x
  1. //3. 生成原始的二维码(不生成图片文件)8 Y1 z5 `& e' p
  2. function scerweima2($url=''){
    * N+ A, x" _: i" |
  3.   require_once 'phpqrcode.php';8 n- @) E4 }% {6 |6 \
  4.   $value = $url;         //二维码内容! s; m7 {& u# T2 ?
  5.   $errorCorrectionLevel = 'L';  //容错级别
    + W' b) m/ N- `
  6.   $matrixPointSize = 5;      //生成图片大小3 @. d# X4 E$ B
  7.   //生成二维码图片' J! M: f3 W$ l% ^) }# U# l
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    . c% A' @" q, U: k: O
  9. }
    " X- ^$ u3 y- Z; o+ M6 M
  10. //调用查看结果3 F9 v1 y) c7 Z1 C
  11. scerweima2('https://www.baidu.com');
    + O9 {3 {; \/ P9 \; e2 j2 b1 [; i
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。5 C" p- Z( l& ^; h) p( i+ t' z
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:! h( _. E/ Y+ T% C9 S
在线生成二维码工具(加强版)- H7 V6 s9 ?2 S) J: P1 m/ n
http://tools.jb51.net/transcoding/jb51qrcode" @0 k8 N0 c. H9 f
在线二维码解码识别工具: \. z/ |! [& Z7 p1 g5 h, w" h, `
http://tools.jb51.net/transcoding/trans_qrcode8 j1 V. k7 j2 n

" V+ I/ r% a, E; H  m! E7 Z5 i  q" E0 ~5 ^" U7 A+ m
+ q% o2 H) ?+ d( ~& [1 ]
0 A* g* w- M$ l5 v: z/ b7 R

9 t: y4 i; K  d/ w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 01:09 , Processed in 0.112561 second(s), 22 queries .

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