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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:6 {% Y" ]; V' z% q0 G3 k
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。/ X8 X* ~5 w6 z6 J3 |) O# A
前期准备:
2 a" g& p8 q" Z7 R1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
( D3 h( @2 h+ }9 d9 E) p8 O 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
; w9 h2 m  B+ |1 N2 j7 t方法解读:
. ~/ O: j4 x: u8 U/ d+ H% P下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
& M7 ?0 t6 [8 Y+ C7 s' k
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    8 A/ `! C) h8 B& |
  2. {) c; A- U- ^8 S+ I! {, ^
  3.   $enc = QRencode::factory($level, $size, $margin);$ E: Z! z* b% o- C" l4 |! u
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    1 d; @$ A7 @4 {3 f( w5 \2 K( g
  5. }# {+ M0 i% h# p, m
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;: t3 O" t1 U" h9 d: M& C
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
7 V* k  M3 s; @9 }1 K4 E; s# k+ S0 j 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;% W- z8 w" B; _/ d' u4 ~0 g  ^# [* e
第4个参数$size:控制生成图片的大小,默认为4;) E( [* P, D6 b. V3 N
第5个参数$margin:控制生成二维码的空白区域大小;4 X, L" }# S7 b/ n8 H
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;5 _9 U& }) n2 G1 K4 |
使用示例:
. W" j( L9 ^  u1. 生成二维码(生成图片文件)* M- E% P* f- A& A
  1. // 1. 生成原始的二维码(生成图片文件)$ H+ c! q9 m9 z; a
  2. function scerweima($url=''){
    6 Q1 l8 i& q1 S& D& i
  3.   require_once 'phpqrcode.php';
    1 ^8 ~- G' M% n4 J; ]$ m( \" |
  4.   $value = $url;         //二维码内容
    ; E6 ^& \8 T8 i% B$ q$ t0 b7 H& O
  5.   $errorCorrectionLevel = 'L';  //容错级别
      O: e' Q* f# t4 d' k1 {# i
  6.   $matrixPointSize = 5;      //生成图片大小/ A) f4 U3 o1 y. t& b* n
  7.   //生成二维码图片
    / l2 N; R# c9 ]
  8.   $filename = 'qrcode/'.microtime().'.png';$ s; V- I& x; R" V$ ~, I
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ; l9 s" b! w6 ]" @' g
  10.   $QR = $filename;        //已经生成的原始二维码图片文件: i; p; ^" T8 _
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    - |3 M' W1 R& ?5 s5 W5 R5 @* a
  12.   //输出图片* ]% G+ T+ W5 z/ K$ m3 w5 U! V
  13.   imagepng($QR, 'qrcode.png');" d" I. |' o- j1 b1 ^' w
  14.   imagedestroy($QR);
    ! ?9 J$ M0 m; o& v, ^( `5 J
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    , h# {  A4 @4 ~. t8 o: x
  16. }
    5 \9 {$ D3 {( I* Q3 p
  17. //调用查看结果
    8 G1 w" |8 B0 H' V- I- D
  18. echo scerweima('https://www.baidu.com');
    8 W2 U$ u, R  _# S
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
" z+ L2 R; p+ j# k) C8 t- J6 c( h
  1. //2. 在生成的二维码中加上logo(生成图片文件)) f9 ]9 O: P3 l5 y/ V! a* v! Y* v; Z
  2. function scerweima1($url=''){
    0 [$ K+ `  y- ^- {5 y
  3.   require_once 'phpqrcode.php';6 C* p+ P% P7 b. `, Y1 I1 p" \1 ?
  4.   $value = $url;         //二维码内容
    * @0 k! g; k2 j4 x/ F8 q
  5.   $errorCorrectionLevel = 'H';  //容错级别4 @+ K9 c; Y3 G# |/ P
  6.   $matrixPointSize = 6;      //生成图片大小; H. q4 a" `7 y5 s6 X$ J1 n& I7 h
  7.   //生成二维码图片
    3 d& l% Y  F  Q6 W' G1 x2 ^
  8.   $filename = 'qrcode/'.microtime().'.png';
    ; ]5 w# {( V1 B. M4 [3 N$ H
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);- I; A$ K3 e) @$ M3 _
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片! T7 |, s3 j+ ^& Z  U" h
  11.   $QR = $filename;      //已经生成的原始二维码图
    , Y# g  k( J% G1 f7 H' [. W/ \( h
  12.   if (file_exists($logo)) {
    % k& {( x- K9 I* l& W4 f7 G
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。2 e9 g1 x% N5 N9 G. y
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。- Y6 T  S, Q! n" u! g, M! a4 M
  15.     $QR_width = imagesx($QR);      //二维码图片宽度1 Q" I5 [; a2 H
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    2 n/ d$ A: Z$ a% e( o4 A# E
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    9 w3 i% p+ f2 X2 ]( r: T
  18.     $logo_height = imagesy($logo);   //logo图片高度
    1 y8 a* F$ b, A  |/ V. v  h
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    % s" d- z& \2 K1 v+ X. Z
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)) v- Z- e+ {* t) g% i4 {" }
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度# i3 O% _* r* q  u: ]& U. x" p
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    # m) W1 L0 m) u! \- {6 j4 e5 v8 z
  23.     //重新组合图片并调整大小
    - K+ n0 p: d# U+ P+ K' Y
  24.     /*; H, p$ c7 V! m/ u
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    # x* Z3 w6 x4 l2 }( `: {& O
  26.      */
    % D* ^3 {2 h/ y; a+ M+ H: e. e
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);& o$ n/ h9 w& Q$ v# }+ h0 T( d
  28.   }" Y) C% n% {: N3 f" k5 W# `$ _
  29.   //输出图片" Q+ F2 ^# v! C6 p/ V# S+ c1 D/ w  F. L
  30.   imagepng($QR, 'qrcode.png');- R( C& Z2 e+ {, C' e) n1 K, S: T8 G* i
  31.   imagedestroy($QR);
    9 N# |0 [5 I# }# ]
  32.   imagedestroy($logo);
    - |% i/ ]5 \; f  H6 j9 ~
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    7 V7 i3 p% q2 ~4 |0 a, [( p3 i
  34. }5 ?* W. x7 d$ N- W, |
  35. //调用查看结果
    ) W. J5 x# n! ?
  36. echo scerweima1('https://www.baidu.com');
    1 |' S' d9 X3 L& \# p
复制代码
3. 生成二维码(不生成图片文件)
% h6 [: D- S2 P- w! |3 ]
  1. //3. 生成原始的二维码(不生成图片文件)  h0 r4 @0 D9 U
  2. function scerweima2($url=''){
    4 V4 I( D+ ]  \8 P
  3.   require_once 'phpqrcode.php';
    4 F+ q+ G- ?1 g  D
  4.   $value = $url;         //二维码内容( Y! N) S$ P! s; x0 y1 p/ M
  5.   $errorCorrectionLevel = 'L';  //容错级别
    # S- s  r% j+ d0 c
  6.   $matrixPointSize = 5;      //生成图片大小! B. G5 }4 H- K* T6 v
  7.   //生成二维码图片
    1 ]1 ]7 F" U) b  ]# \& a
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    % \8 I  O+ \9 e, E9 f
  9. }
    / Q! Q# a$ U  r4 g5 `- a
  10. //调用查看结果) k( i% X9 L$ ?% A
  11. scerweima2('https://www.baidu.com');
    / Q" Q3 U# j) o2 Y  m5 I
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。; b3 g  D( r. v; z
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
5 l+ a# w. ~: r4 |( t! C在线生成二维码工具(加强版)! D: d1 P3 d  S' Z& H
http://tools.jb51.net/transcoding/jb51qrcode, o9 z* w6 i2 [6 q& W7 p5 q
在线二维码解码识别工具* Y" f! @  A2 I8 S: r3 I- d
http://tools.jb51.net/transcoding/trans_qrcode8 S3 g" g) F/ Q1 @! U

$ ^* ^$ O  E: w: M% t" S. Z4 |2 `! n# s3 Y, p7 W6 s1 ~( t  f2 Q8 ]
1 `% o( N- Q8 g0 S, b

5 u6 o2 l1 N7 S. }. ?! K
6 i3 D. ^+ N/ T9 b8 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 15:01 , Processed in 0.051853 second(s), 20 queries .

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