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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:- J+ ^$ p# n7 d. j% D5 ]1 F; V
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
" c2 Z' b9 L  C; L9 \前期准备:. u0 H! g% u6 c: q+ A6 K0 O
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& U7 R" r0 k' k: w: v& M3 C! K 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态), l0 w2 f5 u! f# u# r
方法解读:& @( N* T9 H( P% G( Z5 i
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ |; M' K0 I4 n, X9 e  D5 L
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)& S5 B. ^% J9 R5 D% `; @
  2. {
    ' V" K* y, @7 R& c
  3.   $enc = QRencode::factory($level, $size, $margin);- x  q  n( e$ N" O, \9 B6 P% J. A
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    / x  R) e! M2 u) T1 s. L* x4 Q
  5. }. z. F! N$ ]1 d2 n
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;6 @- D) S! o8 }
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;; N- P, `  w, F6 i6 I
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
* T7 S/ e) o! O0 J# |( Z 第4个参数$size:控制生成图片的大小,默认为4;; x0 J& v/ P3 O* M' `/ V1 o
第5个参数$margin:控制生成二维码的空白区域大小;2 ~) ?5 E! U  V7 i
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
$ T# ~" S, U4 A$ z) L& B使用示例:2 R% ~/ @, \; v6 w- q
1. 生成二维码(生成图片文件)
" T  R6 m% j* A
  1. // 1. 生成原始的二维码(生成图片文件)
    1 @& P, Z0 O3 A8 ?- B
  2. function scerweima($url=''){! S, K& {8 @) O7 b$ L/ P# B
  3.   require_once 'phpqrcode.php';' H) i# q- C2 O" y3 [
  4.   $value = $url;         //二维码内容: }% G6 s7 ^& b. M* z' T1 g
  5.   $errorCorrectionLevel = 'L';  //容错级别
    / ?; I8 c' a8 @* h' W
  6.   $matrixPointSize = 5;      //生成图片大小; k' g/ [2 A* o
  7.   //生成二维码图片
    3 g1 W$ N8 u" L4 R5 g3 g$ Z( Y
  8.   $filename = 'qrcode/'.microtime().'.png';% }- r1 F- ]# u3 ^4 _
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    3 ^) D: ^6 Q' [) H
  10.   $QR = $filename;        //已经生成的原始二维码图片文件3 b! B  T) S0 C0 p. ~+ ?
  11.   $QR = imagecreatefromstring(file_get_contents($QR));4 M, v4 R5 u# b6 P. ?' d
  12.   //输出图片
    0 p2 E4 Y0 o4 N. H
  13.   imagepng($QR, 'qrcode.png');
    , c7 A$ H# v' V( U3 [
  14.   imagedestroy($QR);
    # g1 f5 K; H0 P* a) q% y( R
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';0 X9 B7 [* u% e; ?8 P
  16. }% k/ u3 Q$ N0 ?1 E
  17. //调用查看结果. U0 r% o* N# [, a( i$ U
  18. echo scerweima('https://www.baidu.com');
    6 j( _" `* }+ H1 C5 Q
复制代码
2. 在生成的二维码中加上logo(生成图片文件)4 C$ _7 b/ \2 k7 L7 I3 G" h, Q/ t
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    . S/ Y, u, H, [1 J% j
  2. function scerweima1($url=''){( H6 `  O  p  |% h: ^
  3.   require_once 'phpqrcode.php';) ]9 E' o/ d/ y, p2 p
  4.   $value = $url;         //二维码内容7 p, t+ H# ~- w, F0 J3 S
  5.   $errorCorrectionLevel = 'H';  //容错级别; D6 ]6 L) n3 F+ U: _2 b" q, A/ T
  6.   $matrixPointSize = 6;      //生成图片大小
    * R$ y& Z; `  g" l5 R% f: @
  7.   //生成二维码图片1 C. Z* \# w* Q' q! f
  8.   $filename = 'qrcode/'.microtime().'.png';
    / S2 a  E. b: a* ]
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);- W5 x2 }% }- u3 P1 A' N. y
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片6 ]. I- q8 r* s& I
  11.   $QR = $filename;      //已经生成的原始二维码图
    1 I5 D; [1 Q6 ?- M& C
  12.   if (file_exists($logo)) {
    ( f$ B& @2 I+ j. g% Q
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。, E( O% C& t. C% |' g
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    ; Q$ V3 g3 R2 N7 M1 T! `* j# S2 N1 J
  15.     $QR_width = imagesx($QR);      //二维码图片宽度0 A6 ?% B1 X- N9 J9 \6 m
  16.     $QR_height = imagesy($QR);     //二维码图片高度( }. W( y& M$ A$ i( ~# w
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    / L& b2 O" b$ V" H2 w
  18.     $logo_height = imagesy($logo);   //logo图片高度, d7 ~' o8 l- Y; l1 K' ]1 t/ u" J
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    % i/ R9 W% e1 W$ h% |6 E' H
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    2 m1 X, S* Z' i: K. i
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    # y6 l* |) H. T0 t5 Q0 F: B
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    2 k0 b: v3 s6 j! K
  23.     //重新组合图片并调整大小7 ~5 z8 j3 _0 P. i4 V
  24.     /** n9 v1 a: o: [. G9 B
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    + a6 D+ A2 e  _
  26.      */
    & B0 g0 x. ~& J: T6 J  W  v6 T
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    2 I) Q0 R5 Q8 F. n1 K
  28.   }' |- U& e! {4 B
  29.   //输出图片
    3 w/ S( z0 @, ^, ^% q0 b
  30.   imagepng($QR, 'qrcode.png');
      J6 }/ z0 E& u5 _: V# P' z
  31.   imagedestroy($QR);
      [  p9 a  Y& \
  32.   imagedestroy($logo);+ I* Q' s3 I: k9 o
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    4 g$ y7 x% j7 ]! P
  34. }
    7 z: q: M# g) y/ d0 R
  35. //调用查看结果4 f# i9 f! G; b: \, ]
  36. echo scerweima1('https://www.baidu.com');! q5 V1 X! G* O& s( [
复制代码
3. 生成二维码(不生成图片文件)0 a' v: V* v7 ?+ I/ y9 B
  1. //3. 生成原始的二维码(不生成图片文件)1 t* @4 t  T" D* A8 ?$ H
  2. function scerweima2($url=''){
    9 `) R6 V& n5 v8 k. b1 v# o1 {* N
  3.   require_once 'phpqrcode.php';3 p3 S% V2 J) b4 p; F! q# E
  4.   $value = $url;         //二维码内容
    9 x( F0 J" `8 ~$ n! {
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ; ^! v5 {8 Q+ l+ Q. H
  6.   $matrixPointSize = 5;      //生成图片大小
    ! F- E5 J, ]% [6 L1 I% g
  7.   //生成二维码图片( j# b7 n. w1 b
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);! \/ F) g' h4 i. _( v7 r
  9. }% W- S0 `$ F: x+ L( S
  10. //调用查看结果
    8 |+ [! ~. Q2 B5 S: v4 K( ?
  11. scerweima2('https://www.baidu.com');; y# W2 P6 `: V" Z& K& Q
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" @6 K5 ?. @; T; v. j# }% lPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
! g+ W6 Z" g5 L/ r  s0 x+ i- q在线生成二维码工具(加强版)1 p3 s. s7 n2 W2 }* p
http://tools.jb51.net/transcoding/jb51qrcode
% f: T0 o$ L! Z1 D  e3 L在线二维码解码识别工具, ~! E7 k( y! X- F/ R
http://tools.jb51.net/transcoding/trans_qrcode8 D. W  ?' v/ ?2 n1 u" z

! C3 f, K0 H) k/ N& Z0 M8 S3 u( z$ r% P) h  _& i
4 e9 u& i! c! {1 C8 {

0 d3 O! j7 h# d3 G
8 O8 H; b% G& e2 n0 Y9 {5 X$ l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:10 , Processed in 0.059560 second(s), 20 queries .

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