<?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后台点击全局——手机访问——开启手机访问及注册登录 修改小程序源
资源推荐
资源详情
资源评论
收起资源包目录
discuz论坛 dzmin 原生 多端小程序源码 (876个子文件)
icon.css 70KB
main.css 63KB
view.css 49KB
view.css 49KB
weui.css 18KB
activity_detail.css 9KB
index.css 8KB
questionnaire_detail.css 7KB
question_answer_detail.css 7KB
thread_detail.css 6KB
work_list.css 5KB
weui-loading.css 4KB
forumdisplay.css 4KB
discovery.css 4KB
admin_setting.css 4KB
question_answer_post.css 4KB
search_class.css 3KB
weui-form.css 3KB
more_user.css 3KB
mine.css 3KB
post_thread.css 3KB
activity_post.css 3KB
class_setting.css 3KB
post_question.css 3KB
animation.css 3KB
class_rank.css 3KB
question_type.css 2KB
login.css 2KB
user_audit.css 2KB
activity_signup.css 2KB
search_picker.css 2KB
mine_favorite.css 2KB
mine_work.css 2KB
class_tag.css 2KB
activity.css 2KB
register.css 2KB
weui-form-preview.css 2KB
weui-uploader.css 2KB
multi_picker.css 2KB
weui-media-box.css 2KB
bound_manage.css 1KB
weui-cell.css 1KB
weui-animate.css 1KB
questionnaire.css 1KB
forum.css 1KB
weui-searchbar.css 1KB
style.css 1KB
activity_joinMask.css 1KB
select_identifyMask.css 1KB
mine_modify.css 1KB
weui-tab.css 1KB
secode.css 912B
weui-navbar.css 872B
post_selectMask.css 816B
audio_player.css 754B
weui-select.css 752B
weui-form_common.css 733B
weui-loadmore.css 719B
weui-panel.css 695B
weui-access.css 676B
weui-footer.css 673B
weui-msg.css 644B
weui-grid.css 638B
weui-agree.css 543B
weui-check.css 456B
weui-article.css 454B
weui-vcode.css 447B
vote_optiondetail.css 398B
weui-progress.css 375B
weui-badge.css 358B
weui-flex.css 248B
app.css 231B
weui-button.css 231B
reset.css 230B
weui-switch.css 178B
create_area.css 175B
create_school.css 175B
create_city.css 175B
create_class.css 175B
weui-grid.css 125B
global.css 125B
weui-button.css 125B
color.css 125B
weui-dialog.css 125B
weui-cell.css 125B
fn.css 125B
weui-msg.css 125B
weui-progress.css 125B
setOnepx.css 125B
setArrow.css 125B
text.css 125B
vote_list.css 114B
user_class_setting.css 86B
question_answer.css 48B
cu-custom.css 39B
register.htm 8KB
register.htm 8KB
mobile.htm 2KB
discuzcode.htm 1003B
index.htm 1B
共 876 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
- Ro小宇2023-12-24总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
- qq_319819212022-09-26资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
- 无极灭霸2022-10-30感谢大佬分享的资源给了我灵感,果断支持!感谢分享~
touch1987
- 粉丝: 0
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功