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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
3 Y6 {  f! R9 D# l" ~5 h* a; \  ^使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。3 u% x0 m* e5 g* h& t$ ^4 S/ m1 g
前期准备:/ Q: A/ g! B; O4 O& k( l0 ]
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/- ]1 R5 M4 P  U/ o4 ^2 Q
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
1 j+ L9 K% C* ^4 }  ~- a$ z方法解读:: i. Q" f8 x$ @$ q. o- M
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):" n! [5 ~6 _0 X3 j* _
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    ) |9 L9 g& v* U& }* }% v. J: f
  2. {" B! f7 r6 ]& h2 L5 Y# o( G
  3.   $enc = QRencode::factory($level, $size, $margin);* j: c9 L2 y1 a: {2 i' h
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
      x. v5 z- ~8 a
  5. }- V& z6 F; B  _4 |" ]' o: c) l
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
7 N/ b/ q. z2 Q( l 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;8 K  e1 Z) d  i9 J+ o
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" Y8 o; E' i. A% e0 m3 M
第4个参数$size:控制生成图片的大小,默认为4;
+ R) @6 [/ ^7 A( e2 f2 [2 l2 l 第5个参数$margin:控制生成二维码的空白区域大小;
; S9 D6 u( p# s* _: k% E 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;6 q; T+ i0 S! t. S; R0 _
使用示例:
/ h6 G% h2 p: V# |: t1. 生成二维码(生成图片文件)' L* a# k5 ]: v+ z5 {
  1. // 1. 生成原始的二维码(生成图片文件)1 x2 {/ M% p* U/ F& _$ w" O
  2. function scerweima($url=''){. R) b2 D1 b2 q* v$ I
  3.   require_once 'phpqrcode.php';+ D0 k; J$ R3 ^( ^" E4 ?: |; S
  4.   $value = $url;         //二维码内容
    / [* }8 C2 B" w3 T
  5.   $errorCorrectionLevel = 'L';  //容错级别' }6 i/ p/ p/ |& x( ~
  6.   $matrixPointSize = 5;      //生成图片大小4 g7 V" Z# q/ M( E/ h' l- {. z" z+ L
  7.   //生成二维码图片
    # S+ C* R4 i( L2 P/ S
  8.   $filename = 'qrcode/'.microtime().'.png';
    ! W9 K6 S' F8 |, u
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    0 \. R: F' H+ @* z7 p7 F
  10.   $QR = $filename;        //已经生成的原始二维码图片文件0 U  e# z7 w' x3 {9 Q
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ) M# d0 O' u/ t. \7 F* D! |
  12.   //输出图片
    - p8 R, N) ~; J( f" ^& C) G4 Q
  13.   imagepng($QR, 'qrcode.png');" I2 B/ ], V/ O9 f! ]
  14.   imagedestroy($QR);9 {/ D3 p: G  j, \* i+ A; |7 E+ p
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';$ s6 j& P6 y  |" P
  16. }
    6 h/ N: f  }2 s% @' N* R
  17. //调用查看结果+ W+ N. h0 p9 I& }% @% p
  18. echo scerweima('https://www.baidu.com');
    6 P9 z- R- D0 N- d  I* Y8 j
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
/ ^" r! ]7 \8 o4 y7 p% B% ~& S
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    0 p. g4 ]0 J4 }; b9 S) O7 T5 ^
  2. function scerweima1($url=''){6 d6 F% L' x' ?
  3.   require_once 'phpqrcode.php';! m7 s& }3 J+ J1 S1 M$ t' Z
  4.   $value = $url;         //二维码内容# U" Q( `% x# B
  5.   $errorCorrectionLevel = 'H';  //容错级别
    . L( ]7 p% {8 r+ h7 }" t! t% F7 |
  6.   $matrixPointSize = 6;      //生成图片大小
    ! _9 T6 _* D) M* X7 ~" o
  7.   //生成二维码图片
    , D9 D5 X" ?6 X. h  o9 d! U+ }4 x
  8.   $filename = 'qrcode/'.microtime().'.png';6 Y' K( s( }& B1 b" b( n, R
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" T/ V3 ^) m2 H7 @3 o
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片2 c& M# b% s+ I: Q& b' M
  11.   $QR = $filename;      //已经生成的原始二维码图4 F( w  o. L+ k1 j) w% R. Z. [4 m
  12.   if (file_exists($logo)) {# m! [7 ?% Q# Q  S3 [
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。% \# E: o9 F# H/ Y3 _, K
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    4 M9 V) x* h2 _8 Q; E
  15.     $QR_width = imagesx($QR);      //二维码图片宽度( T1 ]9 \" s3 ~# e: t+ @
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    0 V( b: L2 X% E+ E7 z# G1 {% @
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    $ `6 l+ C  _+ D' M4 v
  18.     $logo_height = imagesy($logo);   //logo图片高度
      q" V, Z# b0 ^; p) z
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)  \1 l3 j; l; x
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)# g' d# V0 r+ l
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度/ I3 X8 K- a& Q+ F
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点+ ?" y: N/ u  `6 v9 @
  23.     //重新组合图片并调整大小5 U  M( K) j# J% i4 e
  24.     /** S' n" b( F1 O/ R# x
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    2 m, e6 w0 a: z+ r9 C: a5 N
  26.      */
    ' F7 R2 E# w9 c$ w% `0 K: r8 o
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    ! D$ ]/ [) \" @0 e1 U3 J! i. W; M
  28.   }
    ! q8 Q7 E0 T9 ~4 Y8 U$ S3 [
  29.   //输出图片
    ; d5 W2 `0 \/ V
  30.   imagepng($QR, 'qrcode.png');* K$ y: n4 P4 K8 M! x' B
  31.   imagedestroy($QR);
    8 N" _$ H8 [  |# ^! g6 C! R5 P
  32.   imagedestroy($logo);9 r; V. z" b5 ^- U4 a0 x( {  v* H
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    & e: A7 e5 \% Q  k
  34. }
    ( n% f2 T1 k) b5 M( w7 p* O
  35. //调用查看结果
    # S, B+ _2 ~& G; U3 x: v
  36. echo scerweima1('https://www.baidu.com');( u; W# [7 A8 p( Z) W7 P) z
复制代码
3. 生成二维码(不生成图片文件)4 E3 P! }% f" w" t) y
  1. //3. 生成原始的二维码(不生成图片文件): G. J9 O  v) v- X7 T
  2. function scerweima2($url=''){
    - t1 i  b- N8 c# b& a
  3.   require_once 'phpqrcode.php';2 j% k2 t7 W4 V
  4.   $value = $url;         //二维码内容
    # U1 ]" B0 t, M( r5 L& p$ S/ I7 j
  5.   $errorCorrectionLevel = 'L';  //容错级别
    9 g7 F6 D. b9 U, ?
  6.   $matrixPointSize = 5;      //生成图片大小' o' }" ]6 K9 T& a. _7 P: ^
  7.   //生成二维码图片
    & x# B0 v" L1 K$ B2 K1 j* ]1 f/ Q, Q( m
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    ; [9 V1 o5 a  e* }+ x# w
  9. }
    * {6 r1 @: {1 Y2 T8 \; L4 P  x- F
  10. //调用查看结果
    : L0 T& B! h8 V# D1 {0 G2 A2 |1 i
  11. scerweima2('https://www.baidu.com');
    6 v- C0 }, R7 d( _9 H0 R8 [
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
0 G. I; D9 S1 C/ CPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:! P9 D' y* i4 ]( c/ ^
在线生成二维码工具(加强版)! e2 s. Z0 X. g$ U6 O+ S- m
http://tools.jb51.net/transcoding/jb51qrcode* O1 U. R/ h( r0 Q) ?
在线二维码解码识别工具" `. v  Z2 @/ u! J+ C: G, E: I5 ~
http://tools.jb51.net/transcoding/trans_qrcode
4 K- a! ?2 i: J
. s: g5 o( ^7 D+ k9 N& n0 P8 y+ z& p6 L+ ]* v! R0 E, K9 w

0 |6 b6 L0 \  A
6 N( c$ v: z! x
7 {3 H* u, o' J- y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-25 03:16 , Processed in 0.118233 second(s), 21 queries .

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