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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
& b0 z! f$ v) o& j' g: z使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# k9 D- V6 Q/ x7 F: ]1 o; N& T! X
前期准备:/ _2 |0 \: q* y$ ~' @, g3 e. W
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/: `; i0 _" t$ t# j) L. |
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)0 o8 k4 R0 r: M2 q- ?& G6 Z3 f6 t
方法解读:
$ w( Z4 F% d; c. Z) ^6 @下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):, N! q+ k0 [, Q" E2 @' f' l. J
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    5 \6 F0 }" ?$ c/ d) L% S% n
  2. {
    0 F; g. H9 u+ l! W/ f" @* W4 j- y
  3.   $enc = QRencode::factory($level, $size, $margin);! X6 A; [/ L' |
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);4 F9 K0 Q' x# K: l8 L8 Q8 J/ v
  5. }  z. a# v% m3 G
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;( f$ @5 `9 `! g( a7 }
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
% F: c/ N# A: W9 X; | 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;- A9 a- {6 s' d7 |9 b5 p5 u2 E( v
第4个参数$size:控制生成图片的大小,默认为4;
* b* A/ W9 Z8 \# d! X- z5 m 第5个参数$margin:控制生成二维码的空白区域大小;
3 c3 f7 g4 S( {7 H 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;/ ^" i' L: i, O
使用示例:
( ~& J: s2 `, N1. 生成二维码(生成图片文件)" c* U* X( O. J3 `$ b
  1. // 1. 生成原始的二维码(生成图片文件)5 x" N& `9 f4 g0 Q# ]* G
  2. function scerweima($url=''){! N( a! g2 |( e) n  ^7 r  ]
  3.   require_once 'phpqrcode.php';$ ~5 M( ~3 L/ {+ W9 b
  4.   $value = $url;         //二维码内容6 E- [9 A% C; O; A
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' y  S# ~& u* G  p& n
  6.   $matrixPointSize = 5;      //生成图片大小- E5 u; N; \9 E$ T4 N$ r+ ]: I9 U
  7.   //生成二维码图片
    ; D. A& ?0 s: H6 B5 s
  8.   $filename = 'qrcode/'.microtime().'.png';& e3 N8 s, G# n$ U3 @% t3 K! V/ Q4 O
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    7 ^4 \& |, @5 A8 T, m
  10.   $QR = $filename;        //已经生成的原始二维码图片文件; E1 N1 c5 n& A3 L6 {" \
  11.   $QR = imagecreatefromstring(file_get_contents($QR));5 k6 Y( x) w) D% D" _
  12.   //输出图片
    3 ~) S+ K7 B  t- U9 P- y
  13.   imagepng($QR, 'qrcode.png');
    : `$ a: u7 H7 M! f, R
  14.   imagedestroy($QR);
    * @" y9 u; D9 U" V( Y6 _
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';' l2 N+ K# s  D3 a- U# M
  16. }+ W- n$ e8 C' [3 w: [
  17. //调用查看结果- d' r4 v; ~5 L4 Q; P. E' b) G
  18. echo scerweima('https://www.baidu.com');% a4 h$ x* t3 J1 `' M
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
6 m1 ]7 z+ s" K6 O3 G! ~  y
  1. //2. 在生成的二维码中加上logo(生成图片文件)- r7 t: [; B6 _9 Z: ^
  2. function scerweima1($url=''){
    ! G6 I! M7 D& U1 ~2 t
  3.   require_once 'phpqrcode.php';3 J, G! N. r3 T) k- ?
  4.   $value = $url;         //二维码内容: j' H7 P( G5 V9 _% {8 a4 C
  5.   $errorCorrectionLevel = 'H';  //容错级别
    & i! J; d9 ?/ D( C/ F; `
  6.   $matrixPointSize = 6;      //生成图片大小
    + ?; v" F5 Z: [( p& G! M4 F/ m
  7.   //生成二维码图片; }! t# B2 m- l7 q# N! |* J# }+ T8 l" f( i
  8.   $filename = 'qrcode/'.microtime().'.png';
    : [  N3 b- @) i0 Q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    " \, N( X6 D- r! u0 e( Q( ?
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片+ w2 ^0 I' Y, t
  11.   $QR = $filename;      //已经生成的原始二维码图
    ) e8 [; g* l% S2 |1 W
  12.   if (file_exists($logo)) {
    / Z7 `2 z% ]4 L
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。! `/ J$ W- F; K& z/ Z& p
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。. D9 `5 P! ?" H/ s6 A- b
  15.     $QR_width = imagesx($QR);      //二维码图片宽度) l. F# E6 {' Y5 ?& L
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    - Z9 M6 Y( V# ]# l( d$ m& V
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    / k. K1 G! n0 |' |6 z  n/ C- W
  18.     $logo_height = imagesy($logo);   //logo图片高度: }. S( Y/ j0 _- S) L3 ]  W" ~
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)6 n+ u7 X0 z+ u6 U2 N! j
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    , \6 }# ^! w  M5 a# k# f4 U; a
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: y0 E: Y( P" Y2 ], E/ ~$ L/ M
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    # t! W& t! U; ~# T5 d
  23.     //重新组合图片并调整大小
    2 V) q% v4 U# J: [/ n. p2 m
  24.     /*
    + x. c- [- P1 B- f: P5 k
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    ) }; A2 O8 T) O' m0 v( t  r. I4 r9 e
  26.      */7 J* u; U  G8 \
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    $ U6 z+ R1 o4 I$ Y' |- N4 |
  28.   }
    ; i% o3 |% l5 l5 p
  29.   //输出图片
    " L; }' ?! R1 {. s9 X) A) N! D
  30.   imagepng($QR, 'qrcode.png');# T& P8 B7 h3 x2 D1 k9 V! I
  31.   imagedestroy($QR);  V& s  I5 N. Q
  32.   imagedestroy($logo);
    $ _* Z0 Z& x' H. z
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    4 U5 P% Y9 ~! P% J
  34. }
    $ G+ N$ D/ @7 P' i& y( e
  35. //调用查看结果
    ) v  T. Z2 y* i6 M2 ]' H+ @
  36. echo scerweima1('https://www.baidu.com');/ k% D4 E( C# p- Q: k6 \9 i
复制代码
3. 生成二维码(不生成图片文件)
( T: g4 A: X2 _' q2 `4 g
  1. //3. 生成原始的二维码(不生成图片文件)
    ( j) |4 [5 ~; y" }& ^5 J
  2. function scerweima2($url=''){' {% _2 _. N9 Q( p
  3.   require_once 'phpqrcode.php';
    0 d: t8 K  F; X9 x
  4.   $value = $url;         //二维码内容! U5 d5 Q7 N5 \: W2 i5 b8 |
  5.   $errorCorrectionLevel = 'L';  //容错级别2 v6 ]- C( r2 D. S
  6.   $matrixPointSize = 5;      //生成图片大小
    / ?$ z) [0 G) O+ K  A/ d
  7.   //生成二维码图片9 l, a4 l3 o% l
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);; |, E4 Y0 c' P0 j. g8 d) X
  9. }
    " }% Z: j; r9 \& b
  10. //调用查看结果
    & X/ F1 x$ X9 z$ z+ s
  11. scerweima2('https://www.baidu.com');
    , }9 B5 f. y  R  T6 ]
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
& u! g; U5 ~& b+ N( YPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 ]. x9 p/ s/ V# x( T9 ^
在线生成二维码工具(加强版)
: J7 F& _; c9 {1 F5 w* |2 K
http://tools.jb51.net/transcoding/jb51qrcode; ^3 d& I$ q- G3 [+ [
在线二维码解码识别工具* X! v0 l' h# j+ W* D* j
http://tools.jb51.net/transcoding/trans_qrcode
; K- J1 l+ G1 h- q3 u
) v& @5 S# [, q0 ]
" ?* T. A: f( ?! M8 u% D+ f+ \/ i6 g  y7 }7 I" t

8 S. |$ H/ P/ j- ~( |2 v0 ^, g! r/ X5 q8 m# A4 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-7-27 11:30 , Processed in 0.146884 second(s), 21 queries .

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