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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:& A5 w+ B1 y6 L# w6 S. L% G3 v' D
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。2 |8 a" J9 j% z/ ~2 ~/ M$ _
前期准备:
2 ]& ^% u. k4 U9 d4 l4 ]0 N5 X# A1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. I" {4 W$ K: n8 k7 h- { 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)5 T3 C5 W9 n9 x$ K
方法解读:* I+ p9 x) V! N( f: c( v
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 H& Y: M& ?3 Y0 i2 N6 f
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 p1 C$ U4 F4 \6 X
  2. {
    6 S) L. q5 }$ l, L* L6 T
  3.   $enc = QRencode::factory($level, $size, $margin);; {" ]8 }: B" b) W6 H1 _8 X, v: p
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    5 j3 s6 P7 m$ ]2 a! N+ ~
  5. }
    7 ]1 J2 @8 P7 v2 L6 Q8 g3 L2 `% y
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;2 t* `+ h( z% ?8 C" C: ^( S
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
# g* r8 M- \7 c7 O2 W 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;7 h* w# z$ Z& J
第4个参数$size:控制生成图片的大小,默认为4;; z. ?1 u$ C/ _  }) j2 \+ I
第5个参数$margin:控制生成二维码的空白区域大小;
3 w; d9 l/ u4 V+ R( I& B  M 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;7 n% x7 b7 k& u5 g  n% `
使用示例:
% S3 s' q& X5 O- Y  B1. 生成二维码(生成图片文件)
5 Q8 C5 t4 U! M2 h. e8 {
  1. // 1. 生成原始的二维码(生成图片文件)
    * d  ^& m3 s/ Y: p# J* M$ p
  2. function scerweima($url=''){% f; C. U! R& T/ T
  3.   require_once 'phpqrcode.php';4 V- N; @  [( }# t6 b: J6 Q4 ?3 N
  4.   $value = $url;         //二维码内容( o% h; |; L% m! d3 I( x7 S# b
  5.   $errorCorrectionLevel = 'L';  //容错级别
    : G1 y2 H/ f  ^7 ?
  6.   $matrixPointSize = 5;      //生成图片大小
    * b* Z6 l0 v- i5 X! V- ~
  7.   //生成二维码图片
      G$ m) Q. t9 f3 ]- j
  8.   $filename = 'qrcode/'.microtime().'.png';
    ' K5 Q1 H. G! n
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ) o) \! x# K% @, t% y
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    - b: ]  O& o8 {
  11.   $QR = imagecreatefromstring(file_get_contents($QR));8 j- {% B4 {! W3 o
  12.   //输出图片  [0 t6 M; j0 R7 b; H  v7 B& P
  13.   imagepng($QR, 'qrcode.png');
    : f1 b' i6 f9 g
  14.   imagedestroy($QR);
    8 B% P. f; Q. J- X4 B4 j
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';3 t5 q& o% S3 e9 X
  16. }/ n; ~+ T/ F5 r$ C
  17. //调用查看结果
    + ^6 W6 Q  K/ R5 O, f
  18. echo scerweima('https://www.baidu.com');
    " W# O3 v. i6 h( R5 x/ l4 d) }4 I7 T
复制代码
2. 在生成的二维码中加上logo(生成图片文件). W5 o9 s3 p- h! g+ `- q
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    2 Y* ^" C) [0 F4 m* r% a$ s
  2. function scerweima1($url=''){
    7 ~+ j$ V4 d$ K
  3.   require_once 'phpqrcode.php';$ a3 F% ]0 E4 F; u8 H7 E/ _) V, ^
  4.   $value = $url;         //二维码内容
    & w0 }3 @. c. R, F& Q* x
  5.   $errorCorrectionLevel = 'H';  //容错级别! X, A- z" h4 a( {. ?
  6.   $matrixPointSize = 6;      //生成图片大小/ }0 [2 U; }4 q7 N, G
  7.   //生成二维码图片
    3 B2 v; t- @3 L  [  `0 f3 u$ P8 y
  8.   $filename = 'qrcode/'.microtime().'.png';
    0 Q+ m1 f4 L8 y: s, M5 @; c
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);7 C6 `0 u8 M9 b8 l8 D
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片& i: N2 w2 k7 Z# S
  11.   $QR = $filename;      //已经生成的原始二维码图: O2 [0 Y# P( U2 d9 y
  12.   if (file_exists($logo)) {8 X) W4 w6 [. J% v) y# Y5 i  R
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。# y) \% c  Q! f
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。1 _7 L. E3 N  K! G+ v: S& P
  15.     $QR_width = imagesx($QR);      //二维码图片宽度9 V$ _- t5 w! `7 C* J0 [
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    ) C! l7 D7 |# l
  17.     $logo_width = imagesx($logo);    //logo图片宽度, r$ @" ^" m2 |- s+ p
  18.     $logo_height = imagesy($logo);   //logo图片高度
    " F; G2 Y4 L: B
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    " w5 ^" v% K% i& @# ?
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    % O* F9 b8 ?8 }
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ) f2 e  ?4 y- y( f
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点8 A2 N$ s; c- P( X' o
  23.     //重新组合图片并调整大小
    1 f& H8 l, b9 l
  24.     /*1 l2 F0 i* ~# L, d; q7 D* W: a. f
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    * D* C8 w" {/ n% U, Y# v" s/ ~
  26.      */
    . M2 d( Z$ h2 l/ g3 Q* v- f
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    / D+ y8 e6 \* n* D
  28.   }/ F1 h# G: U& }' J: N
  29.   //输出图片
    . z1 ^, x  z  d$ ?" w. f
  30.   imagepng($QR, 'qrcode.png');6 |; e  v$ H# l$ j
  31.   imagedestroy($QR);
    + H9 W" b7 K/ e; ^
  32.   imagedestroy($logo);
    " J( [4 J5 G/ p4 p, E
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';1 v$ B8 c5 ^" h+ {( K
  34. }, q) X& e+ @* k# \5 j$ s2 j& U
  35. //调用查看结果
    # `) ~' @2 ^$ k* x+ C
  36. echo scerweima1('https://www.baidu.com');" c  e: U- ]& A9 G, P/ w
复制代码
3. 生成二维码(不生成图片文件), A! `5 Z5 D  c" s; x
  1. //3. 生成原始的二维码(不生成图片文件)6 k% b% I- B3 g, m/ @8 g. J
  2. function scerweima2($url=''){% ^: P% O- ]4 _) r  r3 a" F
  3.   require_once 'phpqrcode.php';+ ?, p9 a. g/ |) G3 K
  4.   $value = $url;         //二维码内容
    5 A3 `5 i! y* Z! X
  5.   $errorCorrectionLevel = 'L';  //容错级别
    1 j) y9 h& u0 F1 ~* b0 T" N! o
  6.   $matrixPointSize = 5;      //生成图片大小
    ; W0 c% p' p; a! v7 h
  7.   //生成二维码图片
    - k  O2 b8 R7 y& [
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);- g% G0 g. H6 L
  9. }
    , D2 I7 X! O$ m  j
  10. //调用查看结果
    : @9 A& \1 y3 a4 s; B9 X0 b, G/ R) E
  11. scerweima2('https://www.baidu.com');
    ! l0 _% P1 o* e5 ~1 I) B' S1 X9 S7 ^
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。( {! U0 g1 n1 s/ N1 D. c6 v, H9 {  ?
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 }- }& m$ F- D在线生成二维码工具(加强版)$ ^" Q2 A8 c' ^. r7 I
http://tools.jb51.net/transcoding/jb51qrcode
3 B3 i6 O; C8 S# `4 f# y( w在线二维码解码识别工具
- N$ ^7 v' R' ^5 [" i
http://tools.jb51.net/transcoding/trans_qrcode
5 j8 I) s2 {" a& W
( D' I7 G! G7 ~- N, ?4 o. _/ i6 F+ y
9 l# e- h- b: N4 O' A2 ^; u
, @5 u3 I6 u7 E2 ?/ z
* t/ ]# F9 m5 ?; D* q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 10:14 , Processed in 0.103441 second(s), 20 queries .

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