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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
% Y- T6 s1 O, k" f3 N使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
$ K( I2 O0 s, a2 O' ~1 x6 D+ C前期准备:. }( v/ R1 t' |. D, l7 P" ^% t  [; Y
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/; d0 d- _: h9 g9 u3 y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
& |' A! N$ ]3 P: `) n方法解读:
1 E% w# p& L5 F8 `- Q2 ]! W* i, e. B下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):* t5 v( r0 Z$ z: F+ N
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    : Y& y2 l4 C$ X* J9 T4 R
  2. {* y3 w1 k, {0 v
  3.   $enc = QRencode::factory($level, $size, $margin);4 @- B, t* R' r" y7 i! N& V
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    6 [) G6 @1 C. S' A
  5. }5 A( {- _& N, Z/ [
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;9 O5 v* v4 z& U* x( {
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
3 q  |( n/ ]$ n" \ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;* ]% v+ b( p! y: M7 {+ o8 A
第4个参数$size:控制生成图片的大小,默认为4;
, O7 q8 |6 {( ?8 y 第5个参数$margin:控制生成二维码的空白区域大小;5 s8 j+ K  m2 I% Y0 ?" w
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
; ?  G/ z$ {* r% Z7 S% m使用示例:
* o) J* b) ?3 \- a1. 生成二维码(生成图片文件)
5 ]3 r$ C, w; g7 w- B
  1. // 1. 生成原始的二维码(生成图片文件)2 O0 b. {9 D7 d$ w  W
  2. function scerweima($url=''){$ J: `" ^2 G1 K
  3.   require_once 'phpqrcode.php';9 t, L/ X: T& d/ _! @* O$ Q
  4.   $value = $url;         //二维码内容
    # x, e3 [) J* M; d" P1 K/ j; k' e
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ! b) U7 d7 w4 Y7 Y# v+ j& \0 H* X4 H5 w
  6.   $matrixPointSize = 5;      //生成图片大小5 r7 g! r( Y) O4 q" V8 x$ h
  7.   //生成二维码图片7 \/ _8 i& K$ _+ {( s! D
  8.   $filename = 'qrcode/'.microtime().'.png';9 Z' t: z1 s# d- H* Z
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    6 X+ q9 O  G0 c0 R3 v
  10.   $QR = $filename;        //已经生成的原始二维码图片文件+ s' f2 v. X. [" Y2 t
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ; ]2 E8 v7 e$ C* j, M
  12.   //输出图片
    5 I4 P* ~9 k6 D+ ^. t
  13.   imagepng($QR, 'qrcode.png');1 q6 I7 {  o0 J, b9 P- ?
  14.   imagedestroy($QR);4 q$ g- w) C4 M8 z% p7 R* q
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    0 R; v4 g0 O$ i8 ?+ n0 ?- g, j0 N
  16. }* `! x+ o* x# ?( e
  17. //调用查看结果
    - @( C4 O/ D  x6 T0 t
  18. echo scerweima('https://www.baidu.com');
    & a. ]( b0 [3 @3 J9 q3 K/ Y" E
复制代码
2. 在生成的二维码中加上logo(生成图片文件); a& Z* J& ]) L! A! d4 Q3 e
  1. //2. 在生成的二维码中加上logo(生成图片文件)7 `) r( Y+ O, T9 s6 R  Q/ ]
  2. function scerweima1($url=''){. x/ G' R! s  L( k& V
  3.   require_once 'phpqrcode.php';5 P6 @0 b  l3 e! e' U3 S0 d$ {3 D+ A
  4.   $value = $url;         //二维码内容
    6 c7 c/ D, V6 U# T( ^! l* F! w7 e
  5.   $errorCorrectionLevel = 'H';  //容错级别; [$ N2 a) M. O6 P0 h8 k+ l
  6.   $matrixPointSize = 6;      //生成图片大小" G1 Y$ @0 W1 ~" a  K
  7.   //生成二维码图片
    ( j2 n5 g; g6 B
  8.   $filename = 'qrcode/'.microtime().'.png';
    * m* [( J  p. R% a$ e, h% k, ~
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    7 o3 K7 q0 G3 g6 ]( j7 c
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    2 ]" f9 L6 [$ [% A3 N: ~. E
  11.   $QR = $filename;      //已经生成的原始二维码图( S7 b; K, K" @
  12.   if (file_exists($logo)) {
    + y" ~. W9 d/ ?; w. k
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    + ]/ k7 Q0 U" Z( y4 ]8 U) s
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。+ X7 k2 k2 n# ~( {5 Y  n
  15.     $QR_width = imagesx($QR);      //二维码图片宽度4 u3 a, F. k( X7 K5 j4 ~9 G; y/ P
  16.     $QR_height = imagesy($QR);     //二维码图片高度4 q7 N. \& h9 \& C/ r, q
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    3 k: s5 k! Z) u2 L+ W
  18.     $logo_height = imagesy($logo);   //logo图片高度
    # ^( C) ?2 Y+ ]
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    . i& X5 o; o' c' P/ o: s. c/ M
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    8 T$ u0 w8 r% s" V
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度, X8 q1 l  O& \8 Z4 t9 P2 S
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    - {2 u- X! P$ v) h4 T. N8 c# c: Z
  23.     //重新组合图片并调整大小. f  T/ E' I, q2 R* }
  24.     /*
    ! l5 L$ k* d9 A
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    0 v( G* l8 u9 L* L) I2 A# e8 V
  26.      */* t. |8 E: U5 V' o4 e/ V
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);5 j- |( n5 P6 U4 x1 B
  28.   }
    : Z& g! P' w* _9 J! F
  29.   //输出图片4 y! f: `/ ^: l  N
  30.   imagepng($QR, 'qrcode.png');
    ) @+ ?2 O2 @' q( P, X9 q
  31.   imagedestroy($QR);( R* y2 H! j/ ]  W4 Q
  32.   imagedestroy($logo);
    ' h% A# ]) a, B7 Z
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    # X; Y7 E1 _* D) E( x
  34. }0 ]# F) h( b+ q1 C: P
  35. //调用查看结果) H6 V) X& `! R
  36. echo scerweima1('https://www.baidu.com');
    6 D! w8 s5 L  _' A- _: \
复制代码
3. 生成二维码(不生成图片文件)+ ?6 X+ U7 p" F$ x& q* I
  1. //3. 生成原始的二维码(不生成图片文件)  a% `/ y; J8 _8 W
  2. function scerweima2($url=''){
    1 f  p2 V3 Z/ A* x
  3.   require_once 'phpqrcode.php';' }2 R* x8 I$ h) o5 C, C
  4.   $value = $url;         //二维码内容
    ( C6 V: E% V4 {# [* O* v% Y  W0 Y
  5.   $errorCorrectionLevel = 'L';  //容错级别
    % ~0 g5 @+ o* l! {
  6.   $matrixPointSize = 5;      //生成图片大小
    8 B% {$ ~  [; o" F1 E: M
  7.   //生成二维码图片
    5 _- [; |, j  G# V$ Q& Z
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);4 M' T; A2 a3 P9 {" D/ i: @
  9. }
    2 A# s. L$ M3 ?% o
  10. //调用查看结果! L% u0 q4 d2 \
  11. scerweima2('https://www.baidu.com');( k- O& T6 ~% G" t5 R
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。* s) M7 C6 z5 Q8 ?% O, N1 A8 L) M
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ W* ?2 Q. Q$ }" {" y
在线生成二维码工具(加强版)
& _  b3 X3 _  S1 n
http://tools.jb51.net/transcoding/jb51qrcode
4 N8 m) q: \% i- X5 K5 F在线二维码解码识别工具; e# Z- |1 V2 U: p7 d3 R) N3 W
http://tools.jb51.net/transcoding/trans_qrcode& l+ v% N- {* X/ h

( y  I8 R: Z; {% ?3 o# p# q
% [# n) _# l2 B* J) G% S
. y- T* ?% l& R$ R' l
: f6 J5 l: K! z3 i0 B5 ^3 Z- N' B/ C5 n' P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 16:41 , Processed in 0.057742 second(s), 21 queries .

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