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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP基于phpqrcode类生成二维码的方法详解

发布者: admin | 发布时间: 2020-7-20 21:02| 查看数: 6580| 评论数: 0|帖子模式

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:8 I2 \/ a8 A8 X. r# r" X/ W/ f$ [
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。0 z5 z* v" l. `3 u/ x
前期准备:! M3 B  z% F$ a" m3 l
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
( O* ?) P! J2 L1 d5 E6 I 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
" y2 O6 G0 f6 k6 s方法解读:
  a' D8 u. [1 |. a/ E下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ {# J) q& J/ W0 `6 {6 c! V
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)4 i# t( D' y) M6 c( ~
  2. {
    ; c8 b8 N  h) W) p
  3.   $enc = QRencode::factory($level, $size, $margin);
    8 M3 t0 H4 v7 O5 ?
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    : \- R$ x# f) w4 A
  5. }
    ; Y( p. e2 B' r
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
* Q: u4 r5 @0 c# ]0 A8 J0 o: [4 x 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;  {7 ?( g& T) Y
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;# E9 p' P5 o6 R5 E; y
第4个参数$size:控制生成图片的大小,默认为4;: C2 }3 h, [7 U/ q
第5个参数$margin:控制生成二维码的空白区域大小;
1 i& ]- W& s4 p 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
1 u) r" \9 ^- W# ]! n使用示例:% f1 Y, ^9 O& a) J6 V+ C
1. 生成二维码(生成图片文件)' f0 X2 \  \8 v3 x% U, O7 r% [
  1. // 1. 生成原始的二维码(生成图片文件)
    % |; p" I) S; `  R& e/ {) V0 {
  2. function scerweima($url=''){
    ; `, y8 D5 H0 I  F. ]
  3.   require_once 'phpqrcode.php';5 m/ `, g9 v* B! l
  4.   $value = $url;         //二维码内容
    9 Y4 H  g* Q9 ^2 J. C
  5.   $errorCorrectionLevel = 'L';  //容错级别1 v% [$ f2 }* K2 d
  6.   $matrixPointSize = 5;      //生成图片大小
    3 ]8 @/ q+ S" m
  7.   //生成二维码图片
    ' r( B. {5 c( p* t7 i
  8.   $filename = 'qrcode/'.microtime().'.png';
    9 [, H. d7 w$ ]/ L
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    * {+ A# R- u3 P6 T% v3 I
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    8 X: J4 l* d" k+ s# p2 O
  11.   $QR = imagecreatefromstring(file_get_contents($QR));' y  P$ A1 `+ g1 ?
  12.   //输出图片" T7 F1 `" D& I
  13.   imagepng($QR, 'qrcode.png');
    ! |( W: p- L8 ?8 C
  14.   imagedestroy($QR);/ A2 |& C) o% U$ [1 F6 l1 w1 v1 Q, p- z
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ! U; W7 n3 s$ u
  16. }3 M  p3 k( y3 [% p& M
  17. //调用查看结果
    ' y/ U0 L. D, N+ L
  18. echo scerweima('https://www.baidu.com');& I2 J0 v! A2 t6 \/ v; r
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
. o; Z$ d& @/ j  I! t* @& ^
  1. //2. 在生成的二维码中加上logo(生成图片文件)% I" s. ~+ @2 @6 W( n
  2. function scerweima1($url=''){# V$ d, c5 j9 C5 K6 F) r( y
  3.   require_once 'phpqrcode.php';4 w$ V$ A, j7 G
  4.   $value = $url;         //二维码内容. Z% U: r+ p& x6 C: `1 f2 M
  5.   $errorCorrectionLevel = 'H';  //容错级别  e8 ~- F8 g" n8 d) a5 h
  6.   $matrixPointSize = 6;      //生成图片大小
    - }3 B8 P: H5 E9 ]: G  T
  7.   //生成二维码图片/ `. W* n2 e5 m* U: e
  8.   $filename = 'qrcode/'.microtime().'.png';8 m1 l$ {1 E, f* F6 I1 P6 M4 k
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);, M% v$ M! v3 K9 `. }7 \* a% ~. M
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    # h4 R. E- _- v. Z& Y  t
  11.   $QR = $filename;      //已经生成的原始二维码图
    7 Z* [8 v8 O4 y& C$ s: k
  12.   if (file_exists($logo)) {
    9 {& {0 V  f* {5 w
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。; P) r* q0 B4 b6 n% O4 P& n7 t7 {6 Z
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    : T4 l) f: R# f  d/ N+ w
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ; P" M5 h1 h5 P- f
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    $ l: o. H# A& }" p/ s. _
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    1 V. U; v) q$ w) W8 W% N, i1 W
  18.     $logo_height = imagesy($logo);   //logo图片高度
    - ]2 ]0 `7 g3 T0 [: ]* x
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)- I6 ]7 @9 J" m0 @
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度), B* P' m) j* Y- S7 m" x
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    + Z. q! J' B2 U7 w. C
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    - J& m0 k% X5 N. s9 D
  23.     //重新组合图片并调整大小, t# a1 w& }$ B' |, A
  24.     /*
    / T7 [' f9 V- ]% J) D3 [
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中. {2 }) @! Q. Z4 ?% k4 n- Z9 F8 V
  26.      */# O/ P" T9 O5 P( c% e& t) h6 ?* j6 h1 g
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    ; |3 Z8 M. ?( N% p
  28.   }
    3 g  I5 i7 E% e% D* R, {( @
  29.   //输出图片
    * |% d* v6 G/ K' m+ f4 s
  30.   imagepng($QR, 'qrcode.png');
    & E2 \, j" z1 |( a$ P
  31.   imagedestroy($QR);
    - G6 f; }  e6 H/ D5 N
  32.   imagedestroy($logo);
    9 k2 x6 q3 u& ]9 I
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';  A: C3 f/ B* u* c" U9 N
  34. }. V6 r/ k2 j) z6 \5 a( `
  35. //调用查看结果1 L1 Y$ \) Z+ F. {$ S# ?4 K+ F
  36. echo scerweima1('https://www.baidu.com');1 m4 Q& Q! g/ D$ [+ o4 ?: V
复制代码
3. 生成二维码(不生成图片文件), x7 u! x7 o8 P: ]) @, e
  1. //3. 生成原始的二维码(不生成图片文件)
    # S7 G6 u9 q' z& I3 e( s" D
  2. function scerweima2($url=''){( W, q* h9 d! F* v5 k9 N8 y' F
  3.   require_once 'phpqrcode.php';
    ; X0 H; l' [: r6 N% q+ K0 y' \
  4.   $value = $url;         //二维码内容6 k, b3 @  j6 f! P$ r. \
  5.   $errorCorrectionLevel = 'L';  //容错级别0 O3 h  B# A2 Y) I- D8 @; R8 A9 X
  6.   $matrixPointSize = 5;      //生成图片大小
    7 s  `6 }! P9 D2 |+ A% u
  7.   //生成二维码图片
    ( |' C% l3 [* p2 O& V2 s
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);/ R1 ]5 P  @/ W4 B2 @
  9. }
    0 q4 k$ E  F" }. L( e, W+ u
  10. //调用查看结果0 N: x* J$ @4 S  _
  11. scerweima2('https://www.baidu.com');/ t* j8 y3 F' I2 D
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。% N# `0 `6 H0 s8 D( K
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:* G. W. C9 V# P1 `  E
在线生成二维码工具(加强版)/ Z7 j* r# P4 n" a
http://tools.jb51.net/transcoding/jb51qrcode
0 r, x/ T1 M( u' u; I在线二维码解码识别工具
$ {4 [; T0 Z' J
http://tools.jb51.net/transcoding/trans_qrcode
- L- \' ^7 ?: i( [! Y/ u, X
  J/ T* A& d8 W4 N* H) G8 T; _& e
: n. B9 W2 Q$ a- a3 K
1 r: F6 j$ I( T9 @8 Y0 X2 C2 @9 a

& s% n- k) l% N  a9 m6 p

最新评论

GMT+8, 2023-3-28 12:54 , Processed in 0.141208 second(s), 22 queries .

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