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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
' ~  }; }! V- x使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
( {+ L! Y+ F8 l, u1 K5 k前期准备:
+ d+ ^0 E- ?8 q4 @1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/7 @, Y1 M0 t! K  z
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
. v7 G# b( V2 I方法解读:0 a. r; A/ L0 ?' v- W: a9 H
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):+ H) X9 }3 ~7 G5 M. n
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false). {( H5 z! Q9 N9 C4 M
  2. {
    ! S0 P2 z2 j* l8 b# U* S7 v5 ]) K
  3.   $enc = QRencode::factory($level, $size, $margin);
    ( G! n8 d" I0 e$ |$ w9 g
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);8 C* P# B( u' G+ D# D" O
  5. }7 h, u* {  d2 P+ j2 U0 W# Q% L
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;, E) ~$ J" g; p% [" u# L+ s
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;5 l; K6 N% M, O
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
2 J+ Q* F! }( V3 C' `8 ] 第4个参数$size:控制生成图片的大小,默认为4;5 G# X( A: i  L* K8 V* V
第5个参数$margin:控制生成二维码的空白区域大小;
+ o" h6 Y( r$ p" Q6 w5 j1 `- L0 | 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
- W$ ~7 A2 n; r; c& I- `使用示例:
5 X! q& R$ j( O/ R0 L8 k1. 生成二维码(生成图片文件)
; m* f+ M! H9 ^6 }3 ]
  1. // 1. 生成原始的二维码(生成图片文件)
    . d( W* T7 \  }! C, f5 T/ Y
  2. function scerweima($url=''){0 H- ~9 N) w& O
  3.   require_once 'phpqrcode.php';2 X" j7 b* G' t; `3 j# X$ h
  4.   $value = $url;         //二维码内容
    9 y; S4 L8 J! @" b# Z
  5.   $errorCorrectionLevel = 'L';  //容错级别2 u) t; @/ d0 A5 d+ R; o. }
  6.   $matrixPointSize = 5;      //生成图片大小0 r  i7 a3 e. p0 j! i9 Z! T
  7.   //生成二维码图片( f" ^  C: i5 a7 F' c' E8 J0 Z: m
  8.   $filename = 'qrcode/'.microtime().'.png';; K. ]5 o; C' `( s9 V$ N) w9 w: P
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);' W, n% m8 c- W0 K
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    5 q/ ?4 j8 g( M- ?
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    5 E% q4 T8 f5 G5 a
  12.   //输出图片: |+ O6 I7 w/ U- [* E/ e
  13.   imagepng($QR, 'qrcode.png');
      p, {* z2 n0 j7 Y: p! E2 B
  14.   imagedestroy($QR);
    , t; c1 H$ I" D* t# l
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
      j, c- C* [6 y5 [+ L( S3 d2 K
  16. }( @/ P/ R( Q8 u# w1 T, Z
  17. //调用查看结果
    + E# R  Z5 M" k% H4 Y
  18. echo scerweima('https://www.baidu.com');$ q' ^- M8 c& b* G5 }: E# B
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
; t  E; j+ G8 v* Y& I# G1 }
  1. //2. 在生成的二维码中加上logo(生成图片文件), [3 C! O  K- j" F5 s2 P
  2. function scerweima1($url=''){5 I, f3 O* Y: w5 V( V5 x+ i
  3.   require_once 'phpqrcode.php';# p3 o) ~$ @' I( g9 z
  4.   $value = $url;         //二维码内容
    ' E% R! S. k3 E) w; L3 [. T; M
  5.   $errorCorrectionLevel = 'H';  //容错级别
    & d1 R- n5 q/ x3 b# k( S
  6.   $matrixPointSize = 6;      //生成图片大小
    9 F# ]( n3 A& |( [) Y! C
  7.   //生成二维码图片
    : k& Z+ r$ Z# [' {6 w
  8.   $filename = 'qrcode/'.microtime().'.png';. N3 d% z7 r- k1 ]; U
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    1 h- {- [/ j7 I5 {6 Y8 |
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片9 A# R2 p% y+ k7 e
  11.   $QR = $filename;      //已经生成的原始二维码图- k) I/ S# s$ g% g) j# T0 B
  12.   if (file_exists($logo)) {  P% k, s/ {' @. j. a; S: F
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    ! H) n$ E- t$ {  v+ S
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。) k, x" ^+ q+ Q/ X. L
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    + N# r4 m6 Z& H0 N: E
  16.     $QR_height = imagesy($QR);     //二维码图片高度: p7 u4 x7 G) F% {: c! y, V% B
  17.     $logo_width = imagesx($logo);    //logo图片宽度/ |8 F* L) ?7 K' h& c& l& T
  18.     $logo_height = imagesy($logo);   //logo图片高度
    8 @/ ?* T! S  U; M. r; j$ E# D% `
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    ) W" q& d& P+ \& G7 ^
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    * S5 o) r8 y+ a; t/ D2 x2 a
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    & j8 F$ t5 [4 D
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点) T( e' H) a+ S
  23.     //重新组合图片并调整大小
    7 r8 K6 o+ ^  f6 R" x- d
  24.     /*
    & _( M( g  B# m
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中3 X* i6 ^3 [) T5 l2 [
  26.      */4 U7 T8 ~' t+ l. O' N5 k9 }
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    & X9 n7 K, R/ Q: c
  28.   }
    6 N/ z$ A8 t3 w# U' ?( w
  29.   //输出图片
    ) L7 i( F7 [3 X
  30.   imagepng($QR, 'qrcode.png');
    9 J4 e9 Z& s5 x5 Y
  31.   imagedestroy($QR);
    ( d+ `7 I4 s! ~  S: b: Z/ x  U
  32.   imagedestroy($logo);$ {% E- a1 g) t, m% J
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    3 b8 Q6 z& j) S/ M/ a  V3 C4 r
  34. }, L, n4 V: ~7 z3 ?8 C
  35. //调用查看结果3 ~" o4 _9 \, ]
  36. echo scerweima1('https://www.baidu.com');4 S, e& H6 ~) W* T1 ^
复制代码
3. 生成二维码(不生成图片文件): b9 w7 H5 p4 ?: D& ^& d' C4 E- }
  1. //3. 生成原始的二维码(不生成图片文件)$ V: O7 ^& @) P' l+ v
  2. function scerweima2($url=''){% i3 ~+ w4 o' G6 A+ ?) U  Q
  3.   require_once 'phpqrcode.php';
    , V! c& v7 u6 y
  4.   $value = $url;         //二维码内容
    ( v1 E" C$ |) A0 K! r: K# [
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' b( ?1 Q9 R5 L) f9 c* o
  6.   $matrixPointSize = 5;      //生成图片大小$ }; X7 a# A9 p8 p$ m1 ^" Y4 U
  7.   //生成二维码图片
    0 Q" z0 @- H+ E$ f: o
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    7 `, C/ m" J. X. L0 ~
  9. }5 w& Z2 a( v  ]# q0 U: j4 q# f
  10. //调用查看结果
    ; S* M$ N" D# M, _" w
  11. scerweima2('https://www.baidu.com');1 B7 f* Z( H. T/ Q% U; E. O" w
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。% h. v# R& w' |. p, B
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
5 C1 e: h0 s9 L0 v在线生成二维码工具(加强版)
* y" ^; R" W% a
http://tools.jb51.net/transcoding/jb51qrcode
* }  h9 J4 s) A6 K在线二维码解码识别工具
' R/ c' {6 L4 Y8 i9 T
http://tools.jb51.net/transcoding/trans_qrcode
0 \: O  m% D1 P8 B: y8 q# ]( y6 D: \  Q1 T

1 ~+ O% i9 z& i/ F- T# A, c/ u- d' _# Z  Z
& ~1 ]1 K( U2 K( f

* v6 {5 x- e/ W' {, ?

最新评论

GMT+8, 2023-2-1 17:53 , Processed in 0.127126 second(s), 22 queries .

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