cncml手绘网

标题: PHP基于phpqrcode类生成二维码的方法详解 [打印本页]

作者: admin    时间: 2020-7-20 21:02
标题: PHP基于phpqrcode类生成二维码的方法详解
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
0 I) x* n8 n! L+ F3 t& I使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。$ h2 }. `5 d: Y7 E# Y0 \( z
前期准备:
# W+ Z. a+ {+ Y, |1 v. Y1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/: O/ b; N  C" ]# [
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
/ f! R9 {( i% O2 K方法解读:
" X3 r7 Q5 P5 y7 I" e1 E- _下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):2 p& `  t9 A* P2 n# d- E' B; H  M1 \' ^
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)0 N5 I- L+ y' ]9 L- i9 |. Q
  2. {7 h4 [. o8 |2 m* x( H* h
  3.   $enc = QRencode::factory($level, $size, $margin);
    3 Z& e) f+ n: ~6 `* \" e# u3 Y& W
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    7 ]! ^0 F% j/ c; `! @/ \# ?
  5. }
    ' q2 Y0 M1 R* q1 ~$ B4 {, w
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
  [; x5 z% B' G/ E6 [+ Z7 f2 h6 F7 ` 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;% y2 G  U! G9 L9 ~$ n
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
) [0 {1 w# q7 h+ n+ V 第4个参数$size:控制生成图片的大小,默认为4;
/ N& k4 O  ~1 F+ y; @( F/ R6 O 第5个参数$margin:控制生成二维码的空白区域大小;; V, y5 s5 N9 z* x
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;6 ]4 _# K! D3 l" T4 _# V2 c
使用示例:
$ A& A: V/ H& Y3 R3 a% U6 y1. 生成二维码(生成图片文件)
6 K) R2 _9 ?. o, \) K$ B( C
  1. // 1. 生成原始的二维码(生成图片文件): G5 t# L5 Y( U/ ]# I( ?' x
  2. function scerweima($url=''){
    ! _  t0 n  t* s# v7 O  {( L0 ^) d. e
  3.   require_once 'phpqrcode.php';
    3 g5 o& i( h+ e* I5 X% W/ }
  4.   $value = $url;         //二维码内容
    4 U1 L) q& N8 k8 f  u9 t
  5.   $errorCorrectionLevel = 'L';  //容错级别
    " z/ ~$ o. C7 L6 P( ^3 _% P
  6.   $matrixPointSize = 5;      //生成图片大小  r% P9 T. |& |7 O5 ^8 \* u: Q3 m
  7.   //生成二维码图片
    - h+ K& f* b! Q* u% S# x
  8.   $filename = 'qrcode/'.microtime().'.png';
    ; H- j' M" _& @% T8 g- C! |8 q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    : X) c4 M+ C" Q. G- F# o
  10.   $QR = $filename;        //已经生成的原始二维码图片文件5 V. }' W4 H+ E3 @9 [; p; E! P
  11.   $QR = imagecreatefromstring(file_get_contents($QR));1 n& N6 `. m3 Q% ?
  12.   //输出图片0 G% Q- K$ I' C
  13.   imagepng($QR, 'qrcode.png');" U  x: s1 R- r9 p& p$ H
  14.   imagedestroy($QR);" ^0 e$ d" l8 A) O& h4 v
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';4 l6 s0 g( m% ?9 M3 ^
  16. }
    + W* W8 P* X% k: [' \! }3 v
  17. //调用查看结果
    . ?8 A5 r) N. C& x! g
  18. echo scerweima('https://www.baidu.com');
    + r, n, h0 {8 D0 M( |5 S% W6 r/ u% _
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
8 L% p' {, M, D+ K* Z: C* M0 f/ |1 ~5 J
  1. //2. 在生成的二维码中加上logo(生成图片文件)
      O1 i* p( Y* [; z/ Y( J
  2. function scerweima1($url=''){9 F  w4 J! F" r7 V1 J+ C
  3.   require_once 'phpqrcode.php';
    ; ~* E3 L. u8 ^& G( P
  4.   $value = $url;         //二维码内容
    3 `: C, g% T% l0 n8 s* Y( i+ p
  5.   $errorCorrectionLevel = 'H';  //容错级别
    7 R% U. x% M9 L9 f2 _" f5 _6 }/ m
  6.   $matrixPointSize = 6;      //生成图片大小$ T9 ]( l0 a: j* i( t% [$ N3 Y
  7.   //生成二维码图片/ ]+ o2 o: {2 V7 t, \) [$ x! G
  8.   $filename = 'qrcode/'.microtime().'.png';( [$ Z' n: T0 Q6 J) ^7 `, P
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);1 X4 T* r. U( H; N" M$ J& @3 T8 y2 x1 m
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片1 a) H5 l0 \' ?- p( P) S
  11.   $QR = $filename;      //已经生成的原始二维码图
    5 S0 v6 B" Y! R; F0 o' d+ z
  12.   if (file_exists($logo)) {0 j  p* T3 Q( s( j- h- Y& a
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。  N( r( y1 {( Y# ~( ]5 \
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    8 a' Z; N6 z9 B! P  D
  15.     $QR_width = imagesx($QR);      //二维码图片宽度4 k9 N" m5 f* A8 \0 l
  16.     $QR_height = imagesy($QR);     //二维码图片高度
      V7 C! Z2 v( A
  17.     $logo_width = imagesx($logo);    //logo图片宽度/ Y5 i2 }( ?% D
  18.     $logo_height = imagesy($logo);   //logo图片高度
    6 d# \( D* F* s- g
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)+ m) ]- y7 ~) `; U
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)- a# Q+ y2 z! j5 \# g/ r7 M
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    + c( ?6 e1 ^# M! w- P$ C2 t/ @
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点: Z+ s, l. ^, f& k$ y7 g6 {$ }1 U
  23.     //重新组合图片并调整大小4 j$ [4 |+ b- z; w. |
  24.     /*0 K  N6 U& I* y. H
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中  n3 J% w; _) i1 D1 L
  26.      */3 y" O# F  w9 c
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);: _, s* k! R2 j
  28.   }
    , n* Z! ]" U" H& z7 i) e8 s9 s
  29.   //输出图片! o/ b# k! H3 \8 I
  30.   imagepng($QR, 'qrcode.png');
    ! Z3 [! Z$ U1 A1 j& ~7 ?% c
  31.   imagedestroy($QR);
    - U9 S# C* U! _9 V
  32.   imagedestroy($logo);/ B/ b2 D4 _+ `4 X* _
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';( a$ [6 K  O  k1 F& i" L* O; u- p" I* ]
  34. }# q: r% a% i$ q! H3 E" m/ V2 p
  35. //调用查看结果0 r& M$ W, y6 S/ o3 Z5 D
  36. echo scerweima1('https://www.baidu.com');
    $ j1 S6 E- j* l* j
复制代码
3. 生成二维码(不生成图片文件)9 R6 O% q9 n, f# ~& f1 I
  1. //3. 生成原始的二维码(不生成图片文件)
    0 W8 m( y; L9 ?. G4 V
  2. function scerweima2($url=''){" c3 X" b! p. k+ i( {
  3.   require_once 'phpqrcode.php';, q, c1 H, j  i5 B8 r& Q
  4.   $value = $url;         //二维码内容
    : R: O1 q! Q9 D+ ?
  5.   $errorCorrectionLevel = 'L';  //容错级别
    9 a1 G/ q. x0 ]- R
  6.   $matrixPointSize = 5;      //生成图片大小* H7 R, }. P& ]3 [
  7.   //生成二维码图片3 O' @& S6 ~/ _& ~4 F* i
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);7 [' f4 G! U/ L$ j2 ^4 x
  9. }3 r2 w( b8 H/ w# ]$ \
  10. //调用查看结果
    * C, g( W4 Q3 P; M6 H4 ]# O$ K
  11. scerweima2('https://www.baidu.com');6 t4 i2 I. h$ _' A' ^
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
2 o& G% m/ n2 E# vPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
' ~1 `& J' ]. V' T! z在线生成二维码工具(加强版). a$ b) ~: K7 L( h
http://tools.jb51.net/transcoding/jb51qrcode
/ o8 d- I; `& K% y9 b9 t( S8 _在线二维码解码识别工具2 r7 L8 \1 p" p& u
http://tools.jb51.net/transcoding/trans_qrcode* ]+ g4 R& q# G( Q& g3 m. K
) P; Q2 A8 n$ q' H' G5 k2 }6 ?

8 `, V6 R& W# ]  m: W) X- |! ~7 c& _2 Y9 A9 D1 v2 E' Q

  `( X( f! ?* p% E" H% h
* G7 I7 N2 s/ V. P




欢迎光临 cncml手绘网 (http://www.cncml.com/) Powered by Discuz! X3.2