PHP基础课程PHP如何生成二维码

PHP基础课程PHP如何生成二维码

时间:2020-02-12 07:46 作者:admin 点击:
阅读模式

各位朋友大家好!

今天给大家带来的基础教程是 PHP如何生成二维码!

这里需要运用到一个PHP的二维码生成类库!

由于源码比较长,需要的朋友可以评论或者私聊小编哦!

下面就是类库的源码!

/*

* PHP QR Code encoder

*

* This file contains MERGED version of PHP QR Code library.

* It was auto-generated from full version for your convenience.

*

* This merged version was configured to not requre any external files,

* with disabled cache, error loging and weker but faster mask matching.

* If you need tune it up please use non-merged version.

*

* For full version, documentation, examples of use please visit:

*

* http://phpqrcode.sourceforge.net/

* https://sourceforge.net/projects/phpqrcode/

*

* PHP QR Code is distributed under LGPL 3

* Copyright (C) 2010 Dominik Dzienia

*

* This library is free software; you can redistribute it and/or

* modify it under the terms of the GNU Lesser General Public

* License as published by the Free Software Foundation; either

* version 3 of the License, or any later version.

*

* This library is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

* Lesser General Public License for more details.

*

* You should have received a copy of the GNU Lesser General Public

* License along with this library; if not, write to the Free Software

* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

*/

/*

* Version: 1.1.4

* Build: 2010100721

*/

//---- qrconst.php -----------------------------

/*

* PHP QR Code encoder

*

* Common constants

*

* Based on libqrencode C library distributed under LGPL 2.1

* Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi

*

* PHP QR Code is distributed under LGPL 3

* Copyright (C) 2010 Dominik Dzienia

*

* This library is free software; you can redistribute it and/or

* modify it under the terms of the GNU Lesser General Public

* License as published by the Free Software Foundation; either

* version 3 of the License, or any later version.

*

* This library is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

* Lesser General Public License for more details.

*

* You should have received a copy of the GNU Lesser General Public

* License along with this library; if not, write to the Free Software

* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

*/

// Encoding modes

define( QR_MODE_NUL , -1);

define( QR_MODE_NUM , 0);

define( QR_MODE_AN , 1);

define( QR_MODE_8 , 2);

define( QR_MODE_KANJI , 3);

define( QR_MODE_STRUCTURE , 4);

// Levels of error correction.

define( QR_ECLEVEL_L , 0);

define( QR_ECLEVEL_M , 1);

define( QR_ECLEVEL_Q , 2);

define( QR_ECLEVEL_H , 3);

// Supported output formats

define( QR_FORMAT_TEXT , 0);

define( QR_FORMAT_PNG , 1);

class qrstr {

public static function set(&$srctab, $x, $y, $repl, $replLen = false) {

$srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));

}

}

//---- merged_config.php -----------------------------

/*

* PHP QR Code encoder

*

* Config file, tuned-up for merged verion

*/

define( QR_CACHEABLE , false); // use cache - more disk reads but less CPU power, masks and format templates are stored there

define( QR_CACHE_DIR , false); // used when QR_CACHEABLE === true

define( QR_LOG_DIR , false); // default error logs dir

define( QR_FIND_BEST_MASK , true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code

define( QR_FIND_FROM_RANDOM , 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly

define( QR_DEFAULT_MASK , 2); // when QR_FIND_BEST_MASK === false

define( QR_PNG_MAXIMUM_SIZE , 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images

//---- qrtools.php -----------------------------

/*

* PHP QR Code encoder

*

* Toolset, handy and debug utilites.

*

* PHP QR Code is distributed under LGPL 3

* Copyright (C) 2010 Dominik Dzienia

*

* This library is free software; you can redistribute it and/or

* modify it under the terms of the GNU Lesser General Public

* License as published by the Free Software Foundation; either

* version 3 of the License, or any later version.

*

* This library is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

* Lesser General Public License for more details.

*

* You should have received a copy of the GNU Lesser General Public

* License along with this library; if not, write to the Free Software

* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

*/

class QRtools {

//----------------------------------------------------------------------

public static function binarize($frame)

{

$len = count($frame);

foreach ($frame as &$frameLine) {

for($i=0; $i

$frameLine[$i] = (ord($frameLine[$i])&1)? 1 : 0 ;

}

}

return $frame;

}

//----------------------------------------------------------------------

public static function tcpdfBarcodeArray($code, $mode = QR,L , $tcPdfVersion = 4.5.037 )

{

$barcode_array = array();

if (!is_array($mode))

$mode = explode( , , $mode);

$eccLevel = L ;

if (count($mode) > 1) {

$eccLevel = $mode[1];

}

$qrTab = QRcode::text($code, false, $eccLevel);

$size = count($qrTab);

$barcode_array[ num_rows ] = $size;

$barcode_array[ num_cols ] = $size;

$barcode_array[ bcode ] = array();

foreach ($qrTab as $line) {

$arrAdd = array();

foreach(str_split($line) as $char)

$arrAdd[] = ($char== 1 )?1:0;

$barcode_array[ bcode ][] = $arrAdd;

}

return $barcode_array;

}

//----------------------------------------------------------------------

public static function clearCache()

{

self::$frames = array();

}

//----------------------------------------------------------------------

public static function buildCache()

{

QRtools::markTime( before_build_cache );

$mask = new QRmask();

for ($a=1; $a

$frame = QRspec::newFrame($a);

if (QR_IMAGE) {

$fileName = QR_CACHE_DIR. frame_ .$a. .png ;

QRimage::png(self::binarize($frame), $fileName, 1, 0);

}

$width = count($frame);

$bitMask = array_fill(0, $width, array_fill(0, $width, 0));

for ($maskNo=0; $maskNo

$mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);

}

QRtools::markTime( after_build_cache );

}

//----------------------------------------------------------------------

public static function log($outfile, $err)

{

if (QR_LOG_DIR !== false) {

if ($err != ) {

if ($outfile !== false) {

file_put_contents(QR_LOG_DIR.basename($outfile). -errors.txt , date( Y-m-d H:i:s ). : .$err, FILE_APPEND);

} else {

file_put_contents(QR_LOG_DIR. errors.txt , date( Y-m-d H:i:s ). : .$err, FILE_APPEND);

}

}

}

}

//----------------------------------------------------------------------