cncml手绘网

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

作者: admin    时间: 2020-7-20 21:02
标题: PHP基于phpqrcode类生成二维码的方法详解
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
: p2 Q4 _; D. M* C  @! t使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。0 l" W% k( ?5 I% l' A5 B  `4 k
前期准备:! u0 W# \% }. g: w1 A* t9 C
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& L& [, j" _4 C7 m9 n5 U9 D 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
0 u  Q6 t/ ]( g, w# S' I方法解读:
" t" I- f3 p/ i* i; s0 i9 _* J" s下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
6 x. ]2 W& L3 x2 L: i, u
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)) k0 B; o, Z3 q5 m. R/ t
  2. {
    $ C% }1 v$ z: m6 ?& u3 y2 W
  3.   $enc = QRencode::factory($level, $size, $margin);8 p6 \2 s% x  v3 }* X
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);% N5 ^$ r4 n5 j; J" D$ j! c
  5. }
    8 w4 ~5 E+ b$ C9 `* [
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;8 K$ ^$ E) r# M8 T
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;+ ?% K$ k/ [  s1 F3 Z* a/ G- O2 ^
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
) A6 B+ [" ]; W& Z6 C8 y$ J 第4个参数$size:控制生成图片的大小,默认为4;0 }2 r7 I1 q3 J, K" ?7 F
第5个参数$margin:控制生成二维码的空白区域大小;* C% D' H5 }0 I) Q# o
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
* T1 o6 `' `/ H% A. \: x使用示例:
( d" {0 q  K2 v7 {4 M) h1. 生成二维码(生成图片文件)
. B) `& e- X" W( Q* K/ ?: Y
  1. // 1. 生成原始的二维码(生成图片文件)/ ]6 @$ @/ d8 Q! P* R1 F
  2. function scerweima($url=''){
    . d2 _0 k1 T2 v1 T2 v
  3.   require_once 'phpqrcode.php';; @+ H& Z7 ^. n8 D; J# [
  4.   $value = $url;         //二维码内容
    4 y' _( |5 \; m
  5.   $errorCorrectionLevel = 'L';  //容错级别0 Z, w/ z! d% |6 ~1 F
  6.   $matrixPointSize = 5;      //生成图片大小' k7 h6 U4 H2 e1 c, B
  7.   //生成二维码图片& q% T( f( {) ^0 N" j& u" p, W6 r
  8.   $filename = 'qrcode/'.microtime().'.png';
    ; Q' |/ W' H  g9 n9 v7 K; N
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);2 {$ R! @5 i3 l2 {" _- ~
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    3 o+ C: G3 Z' Q( A2 [
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    + l6 O2 R" h. R$ P) a: ?
  12.   //输出图片3 Z( f/ F7 g5 X$ t* e# w, j) |$ H6 G- H
  13.   imagepng($QR, 'qrcode.png');
    $ o' M( v2 C+ D& S: v9 L3 B# q7 I0 Q
  14.   imagedestroy($QR);
    $ D' p/ r4 V" \, H2 Y1 R
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    - R3 m4 x% S+ h+ Y/ S$ @3 ?% z" Q
  16. }8 t3 \% T9 g# _
  17. //调用查看结果9 Z+ O" ~% J. c& A
  18. echo scerweima('https://www.baidu.com');
    ' H# l2 _# m- X" H; P
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
  Y7 h" H/ n) y1 N% h0 q- c
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    : N# {* |5 h. z  M7 M7 \9 }
  2. function scerweima1($url=''){# u" Q8 h; U" p4 l* I9 I! }
  3.   require_once 'phpqrcode.php';- I' a% Q; t8 D1 G# R1 |6 F+ b
  4.   $value = $url;         //二维码内容
    ; c3 O( P- z0 q0 k' T- ^$ F
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ; m8 K) y3 ?- @3 S
  6.   $matrixPointSize = 6;      //生成图片大小
    , J6 n! @" n% K! z, |
  7.   //生成二维码图片0 k6 a7 `  c& o, g2 \* Q0 c
  8.   $filename = 'qrcode/'.microtime().'.png';
    0 J* h2 L+ k& B4 q! O4 r9 h9 [3 J
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    . K8 K# f5 W+ D2 I
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片# V9 w6 y, q8 r  s
  11.   $QR = $filename;      //已经生成的原始二维码图( q6 `- |( O  b! S* P- V
  12.   if (file_exists($logo)) {4 h/ E  R1 @# |6 I
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。, S3 e& x8 V! w7 B4 D% N" ?( n: h+ H
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。8 o- Q4 c7 O! |( v1 b
  15.     $QR_width = imagesx($QR);      //二维码图片宽度9 E, x8 `9 ?4 O8 C3 ~
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    2 |8 x, X9 }. c0 u; P
  17.     $logo_width = imagesx($logo);    //logo图片宽度9 [7 x+ u5 F1 L+ s( m9 E* t/ ?6 R
  18.     $logo_height = imagesy($logo);   //logo图片高度
    1 r6 @. @/ [; ~$ V2 P
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)0 D) i3 a" f9 R) \! P" F
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)8 [' t& b" Q; a% X! [
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度0 l! l% y% Z6 V5 f7 J$ k
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点3 H4 O3 o( a$ n7 f/ |6 Z) C
  23.     //重新组合图片并调整大小
    % {/ z( J& x# B% M; K/ F9 O
  24.     /*5 ]. s7 m) F8 q1 g- h
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中4 E+ P' D5 A1 v# u! H# |) ^
  26.      */) b: x6 L: x; ]4 |- C
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);2 b- W2 [) P, B5 C% z7 \, E4 g
  28.   }
    1 `- r) A7 ^  g+ t, J. u! a
  29.   //输出图片- _  a/ C1 `: f& C" V' C
  30.   imagepng($QR, 'qrcode.png');8 a! o( Z7 B+ k* ]; t1 H
  31.   imagedestroy($QR);
    ' d1 d8 J% G4 ]9 p  D
  32.   imagedestroy($logo);
    / |6 W2 L9 w6 {( v  T. _
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';+ ~* v9 t5 E5 a/ v# d; C! @
  34. }
      n! {/ i1 H) L9 I8 P6 Z
  35. //调用查看结果. m" r" G0 C- n" T. a0 R
  36. echo scerweima1('https://www.baidu.com');5 O+ S- j% r( W
复制代码
3. 生成二维码(不生成图片文件)
, I% f/ W9 B2 _% x# j6 `
  1. //3. 生成原始的二维码(不生成图片文件)2 {& j: n  H$ J! q6 m$ X, ]
  2. function scerweima2($url=''){! Y7 R1 X* t0 b7 y/ [, R
  3.   require_once 'phpqrcode.php';
    $ \4 a. }: {& Y, \8 j# S8 E! \! d
  4.   $value = $url;         //二维码内容* O# O" l  N, q) \
  5.   $errorCorrectionLevel = 'L';  //容错级别2 w1 x. r1 _$ H/ Y* c
  6.   $matrixPointSize = 5;      //生成图片大小
    - S) |+ M0 ]+ n* Y( b0 _  Z
  7.   //生成二维码图片
    0 K' X5 Q5 F7 ]* G
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);" s% M  q5 R! z( [$ F; x& _  w
  9. }
    1 x  D* [$ t- J8 J
  10. //调用查看结果
    ) p1 S/ ^% l; ^1 Q9 C1 V6 e
  11. scerweima2('https://www.baidu.com');
    ! Q8 Y- [, S  u, b6 t; o
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
) q$ x# }# T, T% a! [) C3 V3 Y9 cPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:, {4 o6 M2 T7 n  w* x
在线生成二维码工具(加强版)
' H- _& H5 L. f% v
http://tools.jb51.net/transcoding/jb51qrcode
  B" {$ P, V" O  D; h9 w# C' W在线二维码解码识别工具
  l1 l1 ~6 M( N2 {' \
http://tools.jb51.net/transcoding/trans_qrcode. p6 W+ Z" q* j, n' P  J9 l
, e& I: Y7 ]- X  P, _7 y6 |
  n7 o( H& L4 a* ]) A: z

9 x( u- _3 n3 i3 l9 D& P0 u6 |
; C5 |9 j8 R9 v% W5 M( A+ d2 o7 P- x* X1 z





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