<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: qrcode.class.php 33590 2013-07-12 06:39:08Z andyzheng $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
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);
define('QR_ECLEVEL_L', 0);
define('QR_ECLEVEL_M', 1);
define('QR_ECLEVEL_Q', 2);
define('QR_ECLEVEL_H', 3);
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));
}
}
define('QR_CACHEABLE', false);
define('QR_CACHE_DIR', false);
define('QR_LOG_DIR', false);
define('QR_FIND_BEST_MASK', true);
define('QR_FIND_FROM_RANDOM', 2);
define('QR_DEFAULT_MASK', 2);
define('QR_PNG_MAXIMUM_SIZE', 1024);
class QRtools {
public static function binarize($frame) {
$len = count($frame);
foreach ($frame as &$frameLine) {
for ($i = 0; $i < $len; $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 <= QRSPEC_VERSION_MAX; $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 < 8; $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);
}
}
}
}
public static function dumpMask($frame) {
$width = count($frame);
for ($y = 0; $y < $width; $y++) {
for ($x = 0; $x < $width; $x++) {
echo ord($frame[$y][$x]) . ',';
}
}
}
public static function markTime($markerId) {
list($usec, $sec) = explode(" ", microtime());
$time = ((float) $usec + (float) $sec);
if (!isset($GLOBALS['qr_time_bench']))
$GLOBALS['qr_time_bench'] = array();
$GLOBALS['qr_time_bench'][$markerId] = $time;
}
public static function timeBenchmark() {
self::markTime('finish');
$lastTime = 0;
$startTime = 0;
$p = 0;
echo '<table cellpadding="3" cellspacing="1">
<thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>
<tbody>';
foreach ($GLOBALS['qr_time_bench'] as $markerId => $thisTime) {
if ($p > 0) {
echo '<tr><th style="text-align:right">till ' . $markerId . ': </th><td>' . number_format($thisTime - $lastTime, 6) . 's</td></tr>';
} else {
$startTime = $thisTime;
}
$p++;
$lastTime = $thisTime;
}
echo '</tbody><tfoot>
<tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>' . number_format($lastTime - $startTime, 6) . 's</td></tr>
</tfoot>
</table>';
}
}
QRtools::markTime('start');
define('QRSPEC_VERSION_MAX', 40);
define('QRSPEC_WIDTH_MAX', 177);
define('QRCAP_WIDTH', 0);
define('QRCAP_WORDS', 1);
define('QRCAP_REMINDER', 2);
define('QRCAP_EC', 3);
class QRspec {
public static $capacity = array(
array(0, 0, 0, array(0, 0, 0, 0)),
array(21, 26, 0, array(7, 10, 13, 17)),
array(25, 44, 7, array(10, 16, 22, 28)),
array(29, 70, 7, array(15, 26, 36, 44)),
array(33, 100, 7, array(20, 36, 52, 64)),
array(37, 134, 7, array(26, 48, 72, 88)),
array(41, 172, 7, array(36, 64, 96, 112)),
array(45, 196, 0, array(40, 72, 108, 130)),
array(49, 242, 0, array(48, 88, 132, 156)),
array(53, 292, 0, array(60, 110, 160, 192)),
array(57, 346, 0, array(72, 130, 192, 224)),
array(61, 404, 0, array(80, 150, 224, 264)),
array(65, 466, 0, array(96, 176, 260, 308)),
array(69, 532, 0, array(104, 198, 288, 352)),
array(73, 581, 3, array(120, 216, 320, 384)),
array(77, 655, 3, array(132, 240, 360, 432)),
array(81, 733, 3, array(144, 280, 408, 480)),
array(85, 815, 3, array(168, 308, 448, 532)),
array(89, 901, 3, array(180, 338, 504, 588)),
array(93, 991, 3, array(196, 364, 546, 650)),
array(97, 1085, 3, array(224, 416, 600, 700)),
array(101, 1156, 4, array(224, 442, 644, 750)),
array(105, 1258, 4, array(252, 476, 690, 816)),
array(109, 1364, 4, array(270, 504, 750, 900)),
array(113, 1474, 4, array(300, 560, 810, 960)),
array(117, 1588, 4, array(312, 588, 870, 1050)),
array(121, 1706, 4, array(336, 644, 952, 1110)),
array(125, 1828, 4, array(360, 700, 1020, 1200)),
array(129, 1921, 3, array(390, 728, 1050, 1260)),
array(133, 2051, 3, array(420, 784, 1140, 1350)),
array(137, 2185, 3, array(450, 812, 1200, 1440)),
array(141, 2323, 3, array(480, 868, 1290, 1530)),
array(145, 2465, 3, array(510, 924, 1350, 1620)),
array(149, 2611, 3, array(540, 980, 1440, 1710)),
array(153, 2761, 3, array(570, 1036, 1530, 1800)),
array(157, 2876, 0, array(570, 1064, 1590, 1890)),
array(161, 3034, 0, array(600, 1120, 1680, 1980)),
array(165, 3196, 0, array(630, 1204, 1770, 2100)),
array(169, 3362, 0, array(660, 1260, 1860, 2220)),
array(173, 3532, 0, array(720, 1316, 1950, 2310)),
array(177, 3706, 0, array(750, 1372, 2040, 2430))
);
public static function getDataLength($version, $level) {
return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
}
public static function getECCLength($version, $level) {
return self::$capacity[$version][QRCAP_EC][$level];
}
public static function getWidth($version) {
return self::$capacity[$version][QRCAP_WIDTH];
}
public static function getRemainder($version) {
return self::$capacity[$version][QRCAP_REMINDER];
}
public static function getMinimumVersion($size, $level) {
for ($i = 1; $i <= QRSPEC_VERSION_MAX; $i++) {
$words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];
if ($words >= $size)
return $i;
}
return -1;
}
public static $lengthTableBits = array(
array(10, 12, 14),
array(9, 11, 13),
array(8, 16, 16),
array(8, 10, 12)
);
public static function lengthIndicator($mode, $version) {
if ($mode == QR_MODE_STRUCTURE)
return 0;
if ($version <= 9) {
$l = 0;
} else if ($version <= 26) {
$l = 1;
} else {
$l = 2;
}
return self::$lengthTableBits[$mode][$l];
}
public static function maximumWords($mode, $version) {
if ($mode == QR_MODE_STRUCTURE)
return 3;
if ($version <= 9) {
$l = 0;
} else if ($version <= 26) {
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
discuz论坛 dzmin 原生 多端小程序源码 使用discuz论坛作为后端生成微信、QQ、支付宝、头条抖音及百度小程序,并支持安卓或苹果APP. 目录说明 mobile:discuz掌上论坛插件 dzmini:原生小程序源码 dzmini_uni:多端小程序源码 使用说明 修改配置文件config_oauths.php, 将申请好的小程序 appkey appsecret填入并保存 把mobile目录覆盖discuz网站的source/plugin/mobile目录 进入论坛后台,进入应用,找到掌上论坛插件并启用, 点击更新即可 在discuz后台点击全局——手机访问——开启手机访问及注册登录 修改小程序源
资源推荐
资源详情
资源评论


















收起资源包目录





































































































共 876 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论

- Ro小宇2023-12-24总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
- qq_319819212022-09-26资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
- 无极灭霸2022-10-30感谢大佬分享的资源给了我灵感,果断支持!感谢分享~
- ericbluewave2024-11-17资源很赞,希望多一些这类资源。

touch1987
- 粉丝: 0
- 资源: 39

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- mendix考试资料.zip
- 提升小模型推理能力的新方法-基于解决方案指导微调的小型语言模型优化
- 自然语言处理领域的自动链式思考:用于复杂推理任务的多步推理方法及其应用
- 基于零样本提示技术的大规模GUI自动生成与评估
- 船舶靠泊 船舶路径规划 基于NLP的无人船路径规划与靠泊优化控制 文献+代码 MATLAB abstract:本文提出了弹道优化算法作为一种单一的通用算法来解决船舶制导和包括靠泊在内的弹道规划和跟踪
- 《计算机病毒防治:全面指南》
- 整机综合性能测试工具 MacPerTest
- linux常用命令大全
- 202304211072 项峥.zip
- 网络性能测试工具 NetworkPer
- 加密技术中OpenSSL的安装与基础命令使用指南.md
- 大型语言模型多思维模式树方法提升复杂任务推理性能
- linux常用命令大全
- 利用知识图谱提升大型语言模型高中物理问答系统的子问题分解
- Faster-RCNN-Pytorch-master.zip
- 代码风格归一化提升大型语言模型增强型代码搜索性能的研究与应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
