cncml手绘网

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

作者: admin    时间: 2020-7-20 21:02
标题: PHP基于phpqrcode类生成二维码的方法详解
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
1 C. J& W4 {( d# v: D使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# h2 T$ f+ b, K7 }
前期准备:# h. Y. \! l6 @4 s7 U) u. a: Z1 u
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ x: M3 D. u9 P; E+ U! x
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)3 {0 r: h- ^# w- ^; G
方法解读:9 i' O& z' y  e" G; p0 c3 _( Y
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):9 j" c5 X% E7 S5 ~7 q0 T
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    * |; n; N+ S! O9 d
  2. {% F! q2 b3 M+ Q# G) d
  3.   $enc = QRencode::factory($level, $size, $margin);
    4 x7 V  s# j, n" I
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);5 j* \& e0 c2 d; A, J; T
  5. }
    9 t. r  u; w% x; k! h0 g% j
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
( j  ^" b1 s% G$ ?3 c& A0 l 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;/ x% s1 g, x& X: q
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
8 l4 H, o8 }( t 第4个参数$size:控制生成图片的大小,默认为4;
/ z0 [! ?. d& N5 v% k8 \* o 第5个参数$margin:控制生成二维码的空白区域大小;
. q4 \- b' D- e3 A9 w$ |; |# D 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;# N+ B) g' s; p: [
使用示例:- x$ L$ U2 v- Z: g
1. 生成二维码(生成图片文件)
' d7 q/ v0 f3 b, o
  1. // 1. 生成原始的二维码(生成图片文件). K% W3 Y/ O% c7 i3 E1 Z/ |' d
  2. function scerweima($url=''){" A3 r6 a6 E# x, @- K. I* h
  3.   require_once 'phpqrcode.php';
    4 @! Y3 {" a  A; R" P: m  I
  4.   $value = $url;         //二维码内容
    3 h+ h# E! \4 K
  5.   $errorCorrectionLevel = 'L';  //容错级别) n6 [: v" T- A3 b* l0 l
  6.   $matrixPointSize = 5;      //生成图片大小8 l3 H! s1 U& r* w/ K6 a! _
  7.   //生成二维码图片% v) h$ P# M7 k2 L
  8.   $filename = 'qrcode/'.microtime().'.png';8 d1 B0 b* ]$ P/ x" s8 g3 P
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);/ M5 Q& M% E+ G) A" t
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    ) t8 ?8 V% i7 G6 y" A
  11.   $QR = imagecreatefromstring(file_get_contents($QR));& v6 Y6 L& ~( s" j1 d! [) }9 N' d
  12.   //输出图片6 r0 n1 A  P- E
  13.   imagepng($QR, 'qrcode.png');/ K* v3 q1 ]2 j( N
  14.   imagedestroy($QR);# z2 |" Y2 a. c9 D1 ^+ L
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';0 _! [; q8 q* R4 H+ f& |6 H
  16. }
    9 l& M- x/ [: x6 o! \0 S  h
  17. //调用查看结果$ _( t% @; ]3 z( D# B
  18. echo scerweima('https://www.baidu.com');
    & o' s% Q' d# j0 {) e
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
* f5 H" s& b0 K- U9 y4 a0 M# S
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    4 }3 i) y3 N1 l
  2. function scerweima1($url=''){1 J! f9 Y: ?9 u- i* Y- @6 n& }
  3.   require_once 'phpqrcode.php';" [5 n2 `4 b& Q2 L( F) y$ M
  4.   $value = $url;         //二维码内容, R2 `8 D" b- C5 i5 S
  5.   $errorCorrectionLevel = 'H';  //容错级别
    1 E! w" q7 D2 r  V2 w3 O( T
  6.   $matrixPointSize = 6;      //生成图片大小
    . E8 n$ u0 a& Q/ M1 ?; G4 J) o& K1 G6 X
  7.   //生成二维码图片
    - E9 L: K/ J0 J. v: N9 F9 n
  8.   $filename = 'qrcode/'.microtime().'.png';
    ( [1 n- s! X3 }
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);% t( R3 _" U# S" m) ~: e
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    7 p5 r% r3 o8 b
  11.   $QR = $filename;      //已经生成的原始二维码图+ P2 E7 s2 @3 n6 h; V" V
  12.   if (file_exists($logo)) {* Q# U; b  ~4 Z2 V9 Y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    % ?- F6 H, |2 h! F! _
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。% K* [& k8 L6 F; E- e3 R5 j* ?
  15.     $QR_width = imagesx($QR);      //二维码图片宽度" s" m0 Y# v" _& u+ G2 S' t# [$ D+ p
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    , W7 `* g/ ^' \& R6 }
  17.     $logo_width = imagesx($logo);    //logo图片宽度+ y) T8 y, K; q. h! \) N& i8 j  T
  18.     $logo_height = imagesy($logo);   //logo图片高度0 @1 I; f+ U* A. Z( X$ {, b
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    " b5 n8 S% ?9 @1 X% X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    ! C+ V: [- F4 p! l! m
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    5 {, W6 s7 F" h0 }
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点) X% I2 M7 P& c2 t2 `9 Q' Z9 e: y
  23.     //重新组合图片并调整大小
    3 n. B# w% L, i% \3 R& C2 \1 q
  24.     /*
    0 P4 l( h- C- ~( E  e
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    / D& ?2 Z- l) J; |/ E: Z
  26.      */- Q6 g2 t6 ^1 B* c/ u, B# l! S" @
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);6 q, S/ R( i* N
  28.   }" {9 \& f" Q, B8 b3 A) K. M
  29.   //输出图片
    0 `6 ]# l* R6 ?0 y
  30.   imagepng($QR, 'qrcode.png');, p8 Y5 h5 d( Y0 n: y0 c- B6 E: k0 Q; a
  31.   imagedestroy($QR);
    * N7 I& y: h! B) H" ?" |5 U- T
  32.   imagedestroy($logo);
    ; ?7 T9 o8 t+ k. D. m& e5 c7 p
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';: W5 F7 y; y; J! U: d9 A
  34. }% Q2 ?: N. }( K
  35. //调用查看结果1 ?8 i* t0 S1 v7 x. q  @+ N
  36. echo scerweima1('https://www.baidu.com');: w' [, K( ^# d$ P+ D
复制代码
3. 生成二维码(不生成图片文件): {2 s6 S3 g. a2 `) k- |
  1. //3. 生成原始的二维码(不生成图片文件)
    , J3 ?. @$ @) ~- y+ Y
  2. function scerweima2($url=''){, `  b1 P4 Q" @* }1 t1 m) t
  3.   require_once 'phpqrcode.php';% j1 {0 y$ F2 w8 F& y
  4.   $value = $url;         //二维码内容- Z* e! w7 _9 K- W
  5.   $errorCorrectionLevel = 'L';  //容错级别
    0 \+ ]. [/ r0 \8 a  t$ Z& |4 f1 j
  6.   $matrixPointSize = 5;      //生成图片大小
    % I5 K4 N$ Y5 Y5 r7 y  M% g/ X
  7.   //生成二维码图片3 |5 o/ }$ }3 t  _* e9 d( N$ ~. u
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);" J  N+ s- g" k* L7 i. R( O
  9. }' B! [5 r4 v, G
  10. //调用查看结果, I! Y# R+ o1 F/ F4 m' R3 ^
  11. scerweima2('https://www.baidu.com');
      U$ y, J  u: z/ t! @+ E( r3 R, ?
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
  O- h! t4 H3 S: sPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:0 i- B; F8 ]& e/ u+ |; x$ ]% I! Z( V
在线生成二维码工具(加强版)- g' H' Q0 y7 y, e
http://tools.jb51.net/transcoding/jb51qrcode
& j: d# [; w9 b在线二维码解码识别工具
) N. s1 x8 b+ a: f# B! O
http://tools.jb51.net/transcoding/trans_qrcode
1 m, v; D" ]) \, z) p9 b; n( u9 k) k4 T3 U

# w3 R4 \2 M) R7 @$ k4 C7 `1 k. F7 `5 \$ s! Z
. H+ Z* E# o7 e0 T0 \4 Q" }$ ?
. Q7 _8 H' i' Q# H# m! `7 ]& g





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