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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14993|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP基于phpqrcode类生成二维码的方法详解

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
4 _9 h% b8 j/ C% z3 b2 J9 ]使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; c# e! u; x$ C9 ]  @- p( y5 Y& Z前期准备:8 [% F% H& L: a" Q$ C9 r! b; V  e
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/: [$ s+ y$ r( W4 z5 @' t! u4 f* }) E, p
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)7 \, B: Q( J5 B+ H9 O4 \% ^1 X6 D
方法解读:5 |$ e1 _6 h) Q' b4 X: |
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):6 m: f; V& E5 P7 m4 V2 M
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)& V0 |+ U7 a& C6 ]1 G: h6 _
  2. {
    " D- T8 {& D& K! j- c' k
  3.   $enc = QRencode::factory($level, $size, $margin);, ^% q& y! G0 i& U' r+ G# _
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);% J$ J, R- R& B7 I7 e
  5. }5 ]2 G3 V5 t5 M. \' L
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
0 B' R7 t9 V* {/ Z/ ~8 s 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
4 G0 D/ y# B6 u8 g# [" S8 \ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;- N% f3 X; Z, f% k, H; h- T
第4个参数$size:控制生成图片的大小,默认为4;" L) \1 k" z1 ~& N, \! O
第5个参数$margin:控制生成二维码的空白区域大小;' d# i! K5 h6 x. ~
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
, D' t6 q2 X4 i使用示例:7 X4 e6 B0 e% t" e! k8 {( s
1. 生成二维码(生成图片文件)
6 N" l: J5 X" [- u% i
  1. // 1. 生成原始的二维码(生成图片文件)8 o) Y$ o7 e5 G7 w$ ^
  2. function scerweima($url=''){* J! y% v9 H; b( r
  3.   require_once 'phpqrcode.php';, i  s$ c+ ~6 j: ^& H+ p
  4.   $value = $url;         //二维码内容+ [, f* b' U4 q$ r7 G
  5.   $errorCorrectionLevel = 'L';  //容错级别- J5 c, M' c" R6 x. Y
  6.   $matrixPointSize = 5;      //生成图片大小
    5 x. S9 E+ B: T# k6 N; S
  7.   //生成二维码图片
    . j8 Q1 j1 U( Y6 z. X, D' [' C
  8.   $filename = 'qrcode/'.microtime().'.png';
    1 j/ w3 S) c  A" F1 |. y
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ( G3 Y& B; s& ?$ {- v  U% K1 m
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    ' ?' O# _% }3 [4 H
  11.   $QR = imagecreatefromstring(file_get_contents($QR));7 Z$ t# @1 F7 H% F) @% X1 ]& d
  12.   //输出图片9 r6 d1 _$ \. t; B- ?/ `2 Y/ s
  13.   imagepng($QR, 'qrcode.png');+ z6 k+ H7 a, o
  14.   imagedestroy($QR);
    1 |0 y- p+ ^! t9 T: h9 q
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    - g4 Z$ j  G! w- b* Z. G' a! A# X6 C
  16. }
    : Y2 Y- L$ h- A! ~+ i8 A$ H. T
  17. //调用查看结果+ c2 F) ?+ S7 \! \  {( }
  18. echo scerweima('https://www.baidu.com');
    5 T5 K! g7 e6 f' I4 J$ L
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
$ q; c6 a; w% \  H: z
  1. //2. 在生成的二维码中加上logo(生成图片文件); k- ~4 Y. _' o2 J
  2. function scerweima1($url=''){
    $ X7 y* k! Q6 H& k. w/ [" r
  3.   require_once 'phpqrcode.php';
    8 U, Y: i0 I9 k# m, N
  4.   $value = $url;         //二维码内容1 d( P1 Z9 \' `/ ~
  5.   $errorCorrectionLevel = 'H';  //容错级别" x* G6 b$ X# B* ^
  6.   $matrixPointSize = 6;      //生成图片大小  o% _8 N) Z( ~6 y. K: j% k/ V1 @
  7.   //生成二维码图片- J: S1 W" V, A
  8.   $filename = 'qrcode/'.microtime().'.png';9 `* R2 l8 x7 E7 l# f5 T
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    1 Y2 R5 A0 Y  h7 r' C) e
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    ) B6 o6 l2 }: U  E
  11.   $QR = $filename;      //已经生成的原始二维码图
    ( g/ Z; w5 Z, m; m
  12.   if (file_exists($logo)) {
    . w/ b$ W0 e5 l; Z& F3 ^& ~# ?
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    6 Y2 L0 i! m' j# m
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。; a5 F1 u- j* \; Z1 G* X) w
  15.     $QR_width = imagesx($QR);      //二维码图片宽度3 ]' X. D0 g7 v( H& X5 P
  16.     $QR_height = imagesy($QR);     //二维码图片高度. G% D1 G9 j+ [6 ]& K
  17.     $logo_width = imagesx($logo);    //logo图片宽度. a, z" A& `& F  v6 s3 ~
  18.     $logo_height = imagesy($logo);   //logo图片高度
    ; ~/ B; L6 \/ ^3 m& e: P1 |
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    1 I0 S  C0 T) V3 B# p
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度). w# A5 [& B+ u( Y' `8 m0 ]
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    % s# }) N" m% o. {4 B
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点. ~* r: i  L8 W# P, x  {
  23.     //重新组合图片并调整大小
    1 \% C. n) y& n5 G7 w3 K: a8 `
  24.     /*. M$ m9 j) m; l" m1 y: Q( C
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中; y/ E  v0 _% \0 g) G
  26.      */
    ' ?, {, l& `5 M- T
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    + w7 P. i9 G) x6 ?, a
  28.   }
    1 S$ a1 D5 Q9 `& N: K" a+ k* o! m
  29.   //输出图片
    # }/ s8 v) \, ~: {
  30.   imagepng($QR, 'qrcode.png');6 y* z: ?( F; X9 t5 V' Y+ p
  31.   imagedestroy($QR);5 X- R1 L" \( }' F9 P
  32.   imagedestroy($logo);
    8 p1 g2 e+ c0 A+ z6 Z1 ~
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';  a" g8 L$ w; s! z2 _
  34. }
    3 C; O) w' w1 D! V& @% y2 |; ]
  35. //调用查看结果
    7 q( D4 G, Z# e4 l" A2 i
  36. echo scerweima1('https://www.baidu.com');
    . j) E; h- C# I* ?+ M+ }
复制代码
3. 生成二维码(不生成图片文件)/ v6 f0 j. h3 v) c5 U# u) w( j" L
  1. //3. 生成原始的二维码(不生成图片文件)
    . R' w- ]- p/ C5 e, ?$ D# v
  2. function scerweima2($url=''){6 A. M( Q! X  m% r( x( u, n
  3.   require_once 'phpqrcode.php';4 {1 p7 g" n6 a0 q0 M& F. q8 x
  4.   $value = $url;         //二维码内容( S) g" ]+ U! o- {( F3 F' _
  5.   $errorCorrectionLevel = 'L';  //容错级别; [" K. j+ G9 y: S6 S& u
  6.   $matrixPointSize = 5;      //生成图片大小0 e) M2 u2 Y. J9 x7 v: t- u
  7.   //生成二维码图片" ?" w% w3 t8 e/ [  Y
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    ) \4 G! c! o3 S& S' N# g
  9. }* }0 N- C! k( ^* R  e
  10. //调用查看结果
    ) N  U0 {, Q4 R  F2 u
  11. scerweima2('https://www.baidu.com');
    / ]1 |9 \. @6 w0 v
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" I. \& n2 \9 EPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:( o/ I7 w3 h" q  U9 s1 |
在线生成二维码工具(加强版). Q5 U+ k) S. S. W$ C+ ?
http://tools.jb51.net/transcoding/jb51qrcode( A8 R  h$ q. O8 ^) V6 T# p
在线二维码解码识别工具
' G$ p) u+ ]3 N! h+ A! D  H
http://tools.jb51.net/transcoding/trans_qrcode% a4 y/ V- Z! A- z

% X( K3 J, J" z% S
! O4 |1 L+ X4 a" M: E. m
9 |5 ?" y% O% ^/ u* B+ ^+ S
/ r- J. k+ ]: j6 s3 F
  F: k' |2 Q/ _5 n! G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:56 , Processed in 0.060265 second(s), 21 queries .

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