123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172 |
- import {
- __commonJS,
- __privateAdd,
- __privateGet,
- __privateSet
- } from "./chunk-UQGIA5KH.js";
- // ../../../../../../Users/xuruhua/Desktop/zx/new-zx-front-app/node_modules/qs-canvas/index.js
- var require_qs_canvas = __commonJS({
- "../../../../../../Users/xuruhua/Desktop/zx/new-zx-front-app/node_modules/qs-canvas/index.js"(exports, module) {
- var QSCanvas = function() {
- var _nc;
- const platform = getPlatform(), isUni = platform == "uni", isNode = platform == "node", isWeb = platform == "web", imgCache = {}, vmCache = {}, asyncDrawWhiteList = Object.freeze([
- "init",
- "initAsyncDrawMode",
- "initArgs",
- "initCanvas",
- "handleCtx",
- "initData",
- "draw",
- "toImage",
- "updateCanvasWH",
- "clear",
- "restoreAsyncDrawMode"
- ]), calcMethods = Object.freeze([
- "setPaintbrush",
- "setPaintbrushProp",
- "resetPaintbrush",
- "savePaintbrush",
- "restorePaintbrush",
- "calcText",
- "calcImg",
- "measureText",
- "loadImage"
- ]), asyncDrawMethods = Object.freeze([
- "setPaintbrush",
- "setPaintbrushProp",
- "resetPaintbrush",
- "savePaintbrush",
- "restorePaintbrush",
- "drawText",
- "drawStraightLine",
- "drawDoubleStraightLine",
- "drawDotted",
- "drawDottedStraightLine",
- "drawLine",
- "drawTextDecoration",
- "drawImg",
- "drawQrCode",
- "setCircle",
- "setRect"
- ]), allSelfMethods = Object.freeze([
- "setPaintbrush",
- "setPaintbrushProp",
- "resetPaintbrush",
- "savePaintbrush",
- "restorePaintbrush",
- "drawText",
- "drawStraightLine",
- "drawDoubleStraightLine",
- "drawDotted",
- "drawDottedStraightLine",
- "drawLine",
- "drawTextDecoration",
- "drawImg",
- "drawQrCode",
- "setCircle",
- "setRect",
- "calcText",
- "calcImg",
- "measureText",
- "loadImage",
- "drawArray",
- "drawItem"
- ]), needReturnMethods = Object.freeze(["drawText", "drawImg"]), commonMethods = Object.freeze([
- "drawImage",
- "putImageData",
- "getImageData",
- "createImageData",
- "addPage",
- "save",
- "restore",
- "rotate",
- "translate",
- "transform",
- "getTransform",
- "resetTransform",
- "setTransform",
- "isPointInPath",
- "scale",
- "clip",
- "fill",
- "stroke",
- "fillText",
- "strokeText",
- "fillRect",
- "strokeRect",
- "clearRect",
- "rect",
- "measureText",
- "moveTo",
- "lineTo",
- "bezierCurveTo",
- "quadraticCurveTo",
- "beginPath",
- "closePath",
- "arc",
- "arcTo",
- "ellipse",
- "setLineDash",
- "getLineDash",
- "createPattern",
- "createLinearGradient",
- "createRadialGradient"
- ]);
- let nodeCanvas, id = 1;
- function notUnd(t) {
- return String(t) != "undefined";
- }
- function isNull(a) {
- return !((a || a == 0) && !["undefined", "null"].includes(String(a)));
- }
- function getPlatform() {
- if (notUnd(typeof uni))
- return "uni";
- if (notUnd(typeof window) && notUnd(typeof document))
- return "web";
- return "node";
- }
- function getCtx(vm, args) {
- if (isUni) {
- if (!args.canvasId) {
- throw new Error("canvasId 不能为空");
- }
- }
- let canvas, obj = {};
- switch (platform) {
- case "uni":
- canvas = uni.createCanvasContext(args.canvasId, vm);
- obj.canvas = canvas;
- obj.ctx = canvas;
- break;
- case "web":
- canvas = (args == null ? void 0 : args.canvasId) ? document.getElementById(args == null ? void 0 : args.canvasId) : document.createElement("canvas");
- canvas.width = (args == null ? void 0 : args.width) || 10;
- canvas.height = (args == null ? void 0 : args.height) || 10;
- obj.canvas = canvas;
- obj.ctx = canvas.getContext("2d");
- break;
- case "node":
- canvas = nodeCanvas.createCanvas((args == null ? void 0 : args.width) || 10, (args == null ? void 0 : args.height) || 10);
- obj.canvas = canvas;
- obj.ctx = canvas.getContext("2d");
- break;
- }
- return obj;
- }
- const _QSCanvas = class _QSCanvas {
- constructor(obj, vm) {
- __privateAdd(this, _nc, void 0);
- this._id = id++;
- vmCache[this._id] = vm;
- if (obj) {
- this.init(obj);
- }
- }
- init(obj = {}) {
- this.initArgs(obj).initData().initCanvas().handleCtx().resetPaintbrush();
- if (this._data.asyncDrawMode === true) {
- __privateSet(this, _nc, new _QSCanvas({ asyncDrawMode: false }));
- this.initAsyncDrawMode();
- }
- }
- initAsyncDrawMode() {
- if (isUni)
- return;
- const ctxMethods = this._data.ctxMethods;
- const arr = [.../* @__PURE__ */ new Set([...allSelfMethods, ...ctxMethods])];
- for (let i = 0; i < arr.length; i++) {
- const item = arr[i];
- this.handleAsyncDrawModeItem(item);
- }
- }
- handleAsyncDrawModeItem(i) {
- if (isUni)
- return;
- if (asyncDrawWhiteList.includes(i)) {
- console.log("白名单跳过");
- return;
- }
- if (typeof this[i] == "function") {
- if (!this._data.nMethods[i])
- this._data.nMethods[i] = this[i];
- let _this = this;
- this[i] = function() {
- let r;
- if (calcMethods.includes(i)) {
- r = __privateGet(_this, _nc)[i](...arguments);
- }
- if (r && r !== _this && r !== __privateGet(_this, _nc))
- return r;
- if (asyncDrawMethods.includes(i) || _this._data.ctxMethods.includes(i)) {
- _this._data.asyncDrawQueue.push({ method: i, args: arguments });
- }
- if (needReturnMethods.includes(i)) {
- return __privateGet(_this, _nc)[i](...arguments);
- }
- };
- }
- }
- restoreAsyncDrawMode() {
- if (isUni)
- return;
- const nMethods = this._data.nMethods;
- for (const i in nMethods) {
- this[i] = nMethods[i];
- }
- }
- initArgs(obj = {}) {
- this._args = obj;
- return this;
- }
- initCanvas() {
- const canvasObj = getCtx(vmCache[this._id], this._args);
- this.canvas = canvasObj.canvas;
- this.ctx = canvasObj.ctx;
- return this;
- }
- /**
- * 使QSCanvas拥有原有方法
- */
- handleCtx() {
- const ctx = this.ctx;
- const active = (i) => {
- this._data.ctxMethods.push(i);
- this[i] = ctx[i].bind(ctx);
- return;
- function a() {
- return ctx[i](...arguments);
- }
- };
- for (const i in ctx) {
- if (typeof ctx[i] == "function") {
- if (!this[i]) {
- active(i);
- }
- }
- }
- for (let k = 0; k < commonMethods.length; k++) {
- const i = commonMethods[k];
- if (typeof ctx[i] == "function") {
- if (!this[i]) {
- active(i);
- }
- }
- }
- return this;
- }
- initData() {
- this._data = {
- oldPaintbrushProps: {},
- savedPaintbrushProps: [],
- font: { fontStyle: "normal", fontVariant: "normal", fontWeight: "normal", fontSize: 10, fontFamily: "sans-serif" },
- height: this._args.height || 10,
- width: this._args.width || 10,
- whChange: false,
- asyncDrawQueue: [],
- nMethods: {},
- asyncDrawMode: isNode || isWeb ? this._args.asyncDrawMode !== false : false,
- ctxMethods: []
- };
- return this;
- }
- /**
- * 设置画笔
- */
- setPaintbrush(obj = {}) {
- filterPaintbrushProps(obj);
- for (const k in obj) {
- this.setPaintbrushProp(k, obj[k]);
- }
- return this;
- }
- /**
- * 设置画笔操作兼容uni
- */
- setPaintbrushProp(prop, data) {
- if (isNull(prop) || isNull(data))
- return;
- prop = hyphen2Hump(prop);
- const ctx = this.ctx;
- if (prop == "font") {
- if (data) {
- if (typeof data != "object") {
- console.warn("font属性需Object格式");
- return;
- }
- for (const k in data)
- if (isNull(data[k]))
- delete data[k];
- const font = { ...this._data.font, ...data };
- if (isUni)
- font.fontSize = Math.round(font.fontSize);
- this._data.font = font;
- const f = this._data.font;
- this._data.oldPaintbrushProps[prop] = f;
- const setFont = () => {
- ctx.font = `${f.fontStyle || "normal"} ${f.fontVariant || "normal"} ${f.fontWeight || "normal"} ${f.fontSize ?? 10}px ${f.fontFamily || "sans-serif"}`;
- };
- if (isUni) {
- setFont();
- } else
- setFont();
- }
- } else {
- this._data.oldPaintbrushProps[prop] = data;
- const fnn = "set" + prop[0].toUpperCase() + prop.slice(1);
- if (typeof (ctx == null ? void 0 : ctx[fnn]) == "function") {
- ctx[fnn](data);
- } else {
- ctx[prop] = data;
- }
- }
- return this;
- }
- /**
- * 重置画笔
- */
- resetPaintbrush(obj = {}) {
- this.setPaintbrush({
- fillStyle: "#000000",
- strokeStyle: "#000000",
- shadowColor: "#000000",
- shadowBlur: 0,
- shadowOffsetX: 0,
- shadowOffsetY: 0,
- lineCap: "butt",
- lineJoin: "miter",
- lineWidth: 1,
- miterLimit: 10,
- font: this._data.font,
- textAlign: "start",
- textBaseline: "top",
- globalAlpha: 1,
- globalCompositeOperation: "source-over",
- ...obj
- });
- return this;
- }
- saveAndSetPaintbrush(paintbrushProps = {}) {
- this.savePaintbrush();
- this.setPaintbrush(paintbrushProps);
- return this;
- }
- /**
- * 保存画笔设置
- */
- savePaintbrush() {
- this._data.savedPaintbrushProps.unshift({ ...this._data.oldPaintbrushProps });
- return this;
- }
- /**
- * 恢复上次保存的画笔设置
- */
- restorePaintbrush() {
- const savedProps = this._data.savedPaintbrushProps.shift();
- if (savedProps)
- this._data.oldPaintbrushProps = { ...this._data.oldPaintbrushProps, ...savedProps };
- this.resetPaintbrush({ ...this._data.oldPaintbrushProps });
- return this;
- }
- /**
- * 更新画布宽高
- */
- updateCanvasWH(obj = {}) {
- var _a, _b, _c;
- let { width, height, delay } = obj, setCanvasWH = (_a = this._args) == null ? void 0 : _a.setCanvasWH;
- width = width || ((_b = this._data) == null ? void 0 : _b.width) || 10;
- height = height || ((_c = this._data) == null ? void 0 : _c.height) || 10;
- return new Promise((rs, rj) => {
- if (isUni) {
- if (!setCanvasWH || typeof setCanvasWH != "function") {
- rj("setCanvasWH异常, uni-app 请在初始化时传入setCanvasWH函数");
- return;
- }
- setCanvasWH({ height, width });
- setTimeout(() => {
- rs();
- }, delay ?? 50);
- } else {
- this.canvas.height = height;
- this.canvas.width = width;
- rs();
- }
- }).then((r) => {
- if (this._data.width != width || this._data.height != height) {
- this._data.whChange = true;
- }
- this._data.width = width;
- this._data.height = height;
- if (!this._data.asyncDrawMode)
- this.resetPaintbrush(this._data.oldPaintbrushProps);
- });
- }
- /**
- * 清除画布内容
- */
- clear() {
- this.ctx.clearRect(0, 0, this._data.width || 999999, this._data.height || 999999);
- return this;
- }
- /**
- * 兼容uni draw
- */
- draw(obj = {}) {
- const { reserve } = obj;
- return new Promise((rs, rj) => {
- if (isUni) {
- let done = false;
- const settimeoutkey = setTimeout(() => {
- if (!done) {
- rs();
- } else {
- clearTimeout(settimeoutkey);
- }
- }, 3e3);
- this.ctx.draw(reserve ?? false, () => {
- done = true;
- clearTimeout(settimeoutkey);
- rs();
- });
- } else {
- if (this._data.asyncDrawMode) {
- if (reserve !== true)
- this.clear();
- this.restoreAsyncDrawMode();
- this.resetPaintbrush();
- const arr = this._data.asyncDrawQueue;
- new Promise(async (resolve, reject) => {
- for (let i = 0; i < arr.length; i++) {
- const item = arr[i];
- try {
- const r = this[item.method].call(this, ...item.args);
- if (typeof (r == null ? void 0 : r.then) == "function")
- await r;
- } catch (error) {
- reject(error);
- return;
- }
- }
- resolve();
- }).then(() => {
- this._data.asyncDrawQueue = [];
- this.initAsyncDrawMode();
- rs();
- }).catch((err) => {
- this.initAsyncDrawMode();
- rj(err);
- });
- } else {
- rs();
- }
- }
- });
- }
- /**
- * canvas2image
- */
- toImage(obj = {}) {
- return new Promise((rs, rj) => {
- if (isUni) {
- const canvasId = this._args.canvasId;
- if (!canvasId) {
- rj("canvasId不存在");
- return;
- }
- uni.canvasToTempFilePath({
- ...obj,
- canvasId,
- success: (r) => {
- var _a;
- (_a = obj.success) == null ? void 0 : _a.call(obj, r);
- rs(r.tempFilePath);
- },
- fail: (err) => {
- var _a;
- (_a = obj.fail) == null ? void 0 : _a.call(obj, err);
- rj(err);
- }
- }, vmCache[this._id]);
- } else {
- rs(this.canvas.toDataURL(`image/${["jpg", "jpeg"].includes(obj.fileType) ? "jpeg" : "png"}`, obj.quality ?? 1));
- }
- });
- }
- /**
- * 计算文字多行
- */
- calcText(obj = {}) {
- const line = obj.line || -1;
- return new Promise((rs, rj) => {
- try {
- let run2 = function(text, endLine) {
- let endLineWidth = 0;
- const textWidth = mt(text).width;
- if (endLine) {
- if (textWidth < obj.maxWidth || text.length < 2) {
- return { index: text.length, ellipsis: false, width: textWidth };
- } else {
- endLineWidth = mt("...").width;
- }
- }
- const textWidthEndLineWidth = textWidth + endLineWidth;
- if (textWidthEndLineWidth < obj.maxWidth || text.length < 2) {
- return { index: text.length, ellipsis: false, width: textWidthEndLineWidth };
- }
- let loop = true, mid = Math.floor((text.length + 1) / 2), oldMid = 1, mode = "", tw;
- while (loop) {
- if (mid <= 1) {
- loop = false;
- break;
- }
- if (mid > text.length) {
- mid = text.length;
- loop = false;
- break;
- }
- const t = text.substr(0, mid);
- tw = mt(t).width + endLineWidth;
- if (tw > obj.maxWidth) {
- text = t;
- if (mode == "xy" && Math.abs(oldMid - mid) < 1) {
- loop = false;
- } else {
- mode = "dy";
- oldMid = mid;
- mid = Math.floor((t.length + 1) / 2);
- }
- } else if (tw == obj.maxWidth) {
- loop = false;
- } else {
- if (mid <= 1 || Math.abs(oldMid - mid) < 1) {
- loop = false;
- } else {
- mode = "xy";
- oldMid = mid;
- mid += Math.floor((text.length - mid) / 2);
- }
- }
- }
- return { index: mid, ellipsis: endLine, width: tw };
- };
- var run = run2;
- this.saveAndSetPaintbrush({
- ...obj.paintbrushProps || {}
- });
- const mt = this.measureText;
- let splitTexts = [], str = obj.val, width = 0;
- const font = { ...this._data.font };
- if (obj.maxWidth) {
- let i = 0;
- while (str.length) {
- const endLine = line > 0 && splitTexts.length + 1 >= line, { index: len, ellipsis, width: width2 } = run2(str, endLine);
- const txt = str.substr(0, len);
- splitTexts.push({ ...obj, val: txt, y: i ? obj.y + (font.fontSize + (obj.lineHeight || 0)) * i : obj.y, width: width2 });
- if (endLine) {
- if (ellipsis)
- splitTexts[splitTexts.length - 1].val += "...";
- str = "";
- } else
- str = str.slice(len);
- i++;
- }
- width = splitTexts.length == 1 ? splitTexts[0].width : splitTexts.length > 1 ? obj.maxWidth : 0;
- } else {
- splitTexts = [obj];
- width = mt(obj.val).width;
- }
- this.restorePaintbrush();
- rs({
- ...obj,
- calcTexts: splitTexts,
- _calc: true,
- left: obj.x,
- top: obj.y,
- right: obj.x + width,
- bottom: splitTexts[splitTexts.length - 1].y + font.fontSize,
- width,
- height: splitTexts[splitTexts.length - 1].y + font.fontSize - obj.y,
- fontSize: font.fontSize
- });
- } catch (error) {
- rj(error);
- }
- });
- }
- /* 绘制 */
- /**
- * 绘制文本
- */
- drawText(obj = {}) {
- return new Promise(async (rs, rj) => {
- try {
- if (!obj.val) {
- console.warn(`需绘制的文本为空`);
- rs();
- return;
- }
- this.saveAndSetPaintbrush({
- ...obj.paintbrushProps || {}
- });
- const ft = (obj2) => {
- this.fillText(obj2.val, obj2.x, obj2.y);
- }, ftItem = (item) => {
- ft(item);
- if (item.textDecoration)
- this.drawTextDecoration(item);
- };
- const calcR = obj._calc ? obj : await this.calcText(obj);
- for (let i = 0; i < calcR.calcTexts.length; i++) {
- ftItem(calcR.calcTexts[i]);
- }
- this.restorePaintbrush();
- rs(calcR);
- } catch (error) {
- rj(error);
- }
- });
- }
- drawStraightLine(obj = {}) {
- const { x1, y1, x2, y2, paintbrushProps } = obj, ctx = this.ctx;
- ctx.beginPath();
- ctx.moveTo(x1, y1);
- ctx.lineTo(x2, y2);
- this.saveAndSetPaintbrush(paintbrushProps || {});
- ctx.stroke();
- this.restorePaintbrush();
- }
- drawDoubleStraightLine(obj = {}) {
- let { gap } = obj;
- gap = gap ?? 1;
- this.drawStraightLine(obj);
- this.drawStraightLine({ ...obj, y1: obj.y1 + gap, y2: obj.y2 + gap });
- }
- drawDotted(obj = {}) {
- this.setCircle(obj);
- if (obj.clip)
- obj.clip = false;
- this.saveAndSetPaintbrush(obj.paintbrushProps || {});
- this.ctx.fill();
- this.restorePaintbrush();
- }
- drawDottedStraightLine(obj = {}) {
- let { x1, x2, y1, y2, gap, width, paintbrushProps } = obj;
- x2 = x2 - width;
- gap = gap || 1;
- const len = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
- const points = getPoints(x1, y1, x2, y2, Math.floor((len - gap) / (width + gap)), 9999999999);
- this.saveAndSetPaintbrush(paintbrushProps);
- this.drawDotted({ x: x1, y: y1, d: width });
- for (let i = 0; i < points.length; i++)
- this.drawDotted({ x: points[i][0], y: points[i][1], d: width });
- this.drawDotted({ x: x2, y: y2, d: width });
- this.restorePaintbrush();
- }
- drawLine(obj = {}) {
- const { style } = obj;
- switch (style) {
- case "double":
- obj.gap = (obj.width || 1) * 1.5;
- this.drawDoubleStraightLine(obj);
- break;
- case "solide":
- this.drawStraightLine(obj);
- break;
- case "dotted":
- obj.gap = (obj.gap || 1) * 1.5;
- obj.paintbrushProps = { fillStyle: obj.color };
- this.drawDottedStraightLine(obj);
- break;
- }
- }
- /**
- * {
- ...(drawText属性),
- textDecoration: {
- line, //类型 同css text-decoration-line
- color, //线颜色
- width, //线宽度
- * }
- * }
- */
- drawTextDecoration(obj = {}) {
- this.savePaintbrush();
- const oldProps = this._data.oldPaintbrushProps, tw = this.measureText(obj.val).width, tD = obj.textDecoration, line = tD.line || "line-through", color = tD.color || obj.color || oldProps.fillStyle || "#000000", width = tD.thickness || tD.width || (obj.fontSize ? obj.fontSize * 0.1 : false) || 1, style = tD.style || "solide", offset = tD.offset || 0, gap = tD.gap ?? 1, fontSize = obj.fontSize || this._data.font.fontSize;
- this.setPaintbrush({ lineWidth: width, strokeStyle: color });
- let y = 0;
- switch (line) {
- case "line-through":
- y = obj.y + fontSize / 2 - width / 2;
- break;
- case "underline":
- y = obj.y + fontSize;
- break;
- case "overline":
- y = obj.y;
- break;
- }
- switch (oldProps.textBaseline) {
- case "top":
- y += width / 2;
- break;
- case "bottom":
- y -= fontSize;
- break;
- case "center":
- y -= fontSize / 2;
- break;
- }
- y += offset;
- switch (line) {
- case "line-through":
- case "underline":
- case "overline":
- this.drawLine({ x1: obj.x, y1: y, x2: obj.x + tw, y2: y, style, gap, width, color });
- break;
- }
- this.restorePaintbrush();
- }
- /**
- * 绘制图片
- */
- drawImg(obj = {}) {
- return new Promise(async (rs, rj) => {
- try {
- if (!obj.val) {
- console.warn(`需绘制的图片为空`);
- rs();
- return;
- }
- const calcR = obj._calc ? obj : await this.calcImg(obj);
- if ((calcR == null ? void 0 : calcR.drawImageArgs) && Array.isArray(calcR.drawImageArgs))
- this.ctx.drawImage(...(calcR == null ? void 0 : calcR.drawImageArgs) || []);
- rs(calcR);
- } catch (error) {
- rj(error);
- }
- });
- }
- calcImg(obj = {}) {
- return new Promise(async (rs, rj) => {
- try {
- if (!obj.val) {
- console.warn(`需绘制的图片为空`);
- rs();
- return;
- }
- const img = await this.loadImage(obj.val), mode = obj.mode || "scaleToFill";
- let arr, x = obj.x || 0, y = obj.y || 0, w = obj.width || 0, h = obj.height || 0, sw = img.width, sh = img.height, sx = 0, sy = 0;
- const get_6 = () => {
- if (isUni) {
- }
- return [sx, sy, sw, sh, x, y, w, h];
- };
- switch (mode) {
- case "aspectFit":
- h = img.height / img.width * w;
- if (h < obj.height) {
- y = Number(obj.y) + obj.height / 2 - h / 2;
- } else {
- h = obj.height;
- w = img.width / img.height * h;
- x = Number(obj.x) + obj.width / 2 - w / 2;
- }
- arr = get_6();
- break;
- case "aspectFill":
- h = img.height / img.width * w;
- if (h < obj.height) {
- h = obj.height;
- sx = img.width / img.height * obj.height;
- sx = (sx - obj.width) / sx * img.width / 2;
- sw = img.width - sx * 2;
- } else {
- sy = (h - obj.height) / h * img.height / 2;
- sh = img.height - sy * 2;
- }
- w = obj.width;
- h = obj.height;
- arr = get_6();
- break;
- case "widthFix":
- h = obj.height = img.height / img.width * obj.width;
- arr = [x, y, w, h];
- break;
- case "heightFix":
- w = obj.width = img.width / img.height * obj.height;
- arr = [x, y, w, h];
- break;
- default:
- arr = [x, y, w, h];
- }
- arr.unshift(isUni ? img.toString() : img);
- rs({ ...obj, drawImageArgs: [...arr], img, left: obj.x, top: obj.y, right: obj.x + obj.width, bottom: obj.y + obj.height, _calc: true });
- } catch (error) {
- rj(error);
- }
- });
- }
- /**
- * 绘制二维码
- * 诗小柒 的二维码生成器代码
- */
- drawQrCode(obj = {}) {
- return new Promise((rs, rj) => {
- if (!(obj == null ? void 0 : obj.val)) {
- console.warn("绘制二维码val为空");
- rs();
- return;
- }
- this.savePaintbrush();
- let qrcodeAlgObjCache = [];
- let options = {
- text: String(obj.val || "") || "",
- // 生成内容
- size: Number(obj.size || 0) || 200,
- // 二维码大小
- background: String(obj.background || "") || "#ffffff",
- // 背景色
- foreground: String(obj.foreground || "") || "#000000",
- // 前景色
- pdground: String(obj.pdground || "") || "#000000",
- // 定位角点颜色
- correctLevel: Number(obj.correctLevel || 0) || 3,
- // 容错级别
- dx: Number(obj.x || 0) || 0,
- // x轴距离
- dy: Number(obj.y || 0) || 0
- // y轴距离
- };
- let qrCodeAlg = null;
- let d = 0;
- for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) {
- d = i;
- if (qrcodeAlgObjCache[i].text == options.text && qrcodeAlgObjCache[i].text.correctLevel == options.correctLevel) {
- qrCodeAlg = qrcodeAlgObjCache[i].obj;
- break;
- }
- }
- if (d == l) {
- qrCodeAlg = new QRCodeAlg(options.text, options.correctLevel);
- qrcodeAlgObjCache.push({
- text: options.text,
- correctLevel: options.correctLevel,
- obj: qrCodeAlg
- });
- }
- let getForeGround = function(config) {
- let options2 = config.options;
- if (options2.pdground && (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5 || config.row > config.count - 6 && config.row < config.count - 2 && config.col > 1 && config.col < 5 || config.row > 1 && config.row < 5 && config.col > config.count - 6 && config.col < config.count - 2)) {
- return options2.pdground;
- }
- return options2.foreground;
- };
- let count = qrCodeAlg.getModuleCount();
- let ratioSize = options.size;
- let tileW = ratioSize / count;
- let tileH = ratioSize / count;
- for (let row = 0; row < count; row++) {
- for (let col = 0; col < count; col++) {
- let w = (col + 1) * tileW - col * tileW;
- let h = (row + 1) * tileW - row * tileW;
- let foreground = getForeGround({
- row,
- col,
- count,
- options
- });
- this.setPaintbrush({ fillStyle: qrCodeAlg.modules[row][col] ? foreground : options.background });
- this.ctx.fillRect(options.dx + col * tileW, options.dy + row * tileH, w, h);
- }
- }
- this.restorePaintbrush();
- rs({ ...obj, height: obj.size, width: obj.size, left: obj.x, top: obj.y, right: obj.x + obj.width, bottom: obj.y + obj.size });
- });
- }
- /**
- * 圆形
- */
- setCircle(obj = {}) {
- const ctx = this.ctx;
- let { x, y, d, mode } = obj;
- mode = mode || "leftTop";
- const r = d / 2;
- if (obj.clip)
- ctx.save();
- ctx.beginPath();
- switch (mode) {
- case "leftTop":
- ctx.arc(x + r, y + r, r, 0, 2 * Math.PI);
- break;
- case "center":
- ctx.arc(x, y, r, 0, 2 * Math.PI);
- break;
- }
- ctx.closePath();
- if (obj.clip)
- ctx.clip();
- return this;
- }
- /**
- * 矩形
- */
- setRect(obj = {}) {
- const ctx = this.ctx;
- const { x, y, r, height, width } = obj;
- if (obj.clip)
- ctx.save();
- ctx.beginPath();
- if (r && r > 0) {
- ctx.arc(x + r, y + r, r, 1 * Math.PI, 1.5 * Math.PI);
- ctx.lineTo(x + width - r, y);
- ctx.arc(x + width - r, y + r, r, 1.5 * Math.PI, 0);
- ctx.lineTo(x + width, y + height - r);
- ctx.arc(x + width - r, y + height - r, r, 0, 0.5 * Math.PI);
- ctx.lineTo(x + r, y + height);
- ctx.arc(x + r, y + height - r, r, 0.5 * Math.PI, 1 * Math.PI);
- ctx.lineTo(x, y + r);
- } else {
- ctx.moveTo(x, y);
- ctx.lineTo(x + width, y);
- ctx.lineTo(x + width, y + height);
- ctx.lineTo(x, y + height);
- ctx.lineTo(x, y);
- }
- ctx.closePath();
- if (obj.clip)
- ctx.clip();
- return this;
- }
- /**
- * 加载图片
- */
- loadImage(url) {
- return new Promise(async (resolve, reject) => {
- if (!url) {
- console.warn("加载图片url为空");
- resolve();
- return;
- }
- if (imgCache[url]) {
- resolve(imgCache[url]);
- return;
- }
- let img;
- try {
- switch (platform) {
- case "uni":
- img = await new Promise((rs, rj) => {
- if (url._loaded) {
- rs(url);
- return;
- }
- if (~url.indexOf("data:image")) {
- let tempFilePath = url, imageInfoR = {};
- imgTools.base64ToPath(url).then((t) => {
- tempFilePath = t;
- uni.getImageInfo({
- src: tempFilePath,
- success: (imgInfo) => {
- imageInfoR = imgInfo;
- const uniImg = new String(tempFilePath);
- for (const i in imageInfoR)
- uniImg[i] = imageInfoR[i];
- uniImg._loaded = true;
- rs(uniImg);
- },
- fail: (err) => rj(err)
- });
- }).catch((err) => {
- rj(err);
- });
- } else if (url.substr(0, 4) == "http") {
- uni.downloadFile({
- url,
- success: ({ tempFilePath }) => {
- uni.getImageInfo({
- src: tempFilePath,
- success: (imageInfoR) => {
- const uniImg = new String(tempFilePath);
- for (const i in imageInfoR)
- uniImg[i] = imageInfoR[i];
- uniImg._loaded = true;
- rs(uniImg);
- },
- fail: (err) => rj(err)
- });
- },
- fail: (error) => rj(error)
- });
- } else {
- uni.getImageInfo({
- src: url,
- success: (imageInfoR) => {
- const uniImg = new String(url);
- for (const i in imageInfoR)
- uniImg[i] = imageInfoR[i];
- uniImg._loaded = true;
- rs(uniImg);
- },
- fail: (err) => rj(err)
- });
- }
- });
- break;
- case "web":
- img = await new Promise((rs, rj) => {
- if (typeof url != "string") {
- rs(url);
- return;
- }
- const imgObj = new Image();
- imgObj.onload = () => {
- rs(imgObj);
- };
- imgObj.onerror = (err) => {
- rj(err);
- };
- imgObj.src = url;
- });
- break;
- case "node":
- img = await new Promise((rs, rj) => {
- if (typeof url != "string") {
- rs(url);
- return;
- }
- nodeCanvas.loadImage(url).then((res) => {
- rs(res);
- }).catch((err) => {
- rj(err);
- });
- });
- break;
- }
- } catch (error) {
- reject(error);
- }
- imgCache[url] = img;
- resolve(img);
- });
- }
- drawArray(data) {
- return new Promise(async (rs, rj) => {
- try {
- if (!data) {
- rj("drawArray需绘制参数不存在");
- return;
- }
- if (!Array.isArray(data)) {
- rj("drawArray参数需要是Array");
- return;
- }
- data = [...data].sort((a, b) => ((a == null ? void 0 : a.zIndex) ?? 0) - ((b == null ? void 0 : b.zIndex) ?? 0));
- const arr = [];
- for (let i = 0; i < data.length; i++) {
- const item = data[i];
- let r;
- switch (typeof item) {
- case "function":
- r = item();
- if (typeof (r == null ? void 0 : r.then) == "function")
- r = await r;
- break;
- case "object":
- if (Array.isArray(item))
- r = await this.drawArray(item);
- else
- r = await this.drawItem(item);
- break;
- }
- arr.push({ item, result: r });
- }
- rs(arr);
- } catch (error) {
- rj(error);
- }
- });
- }
- drawItem(obj = {}) {
- return new Promise(async (rs, rj) => {
- var _a, _b;
- try {
- let r;
- switch (obj.type) {
- case "text":
- r = await this.drawText(obj);
- break;
- case "image":
- r = await this.drawImg(obj);
- break;
- case "qrcode":
- r = await this.drawQrCode(obj);
- break;
- case "method":
- r = (_a = this[obj.name]) == null ? void 0 : _a.call(this, ...obj.data ? Array.isArray(obj.data) ? obj.data : [obj.data] : []);
- if (typeof (r == null ? void 0 : r.then) == "function")
- r = await r;
- break;
- case "function":
- r = (_b = obj.val) == null ? void 0 : _b.call(obj);
- if (typeof (r == null ? void 0 : r.then) == "function")
- r = await r;
- break;
- }
- rs(r);
- } catch (error) {
- rj(error);
- }
- });
- }
- drawRichText(html) {
- return new Promise(async (rs, rj) => {
- if (!html) {
- rj("drawRichText需绘制参数不存在");
- return;
- }
- if (typeof html == "string")
- html = htmlParse(html);
- const result = [];
- function run(arr, parent) {
- return new Promise(async (res, rej) => {
- var _a;
- for (let i = 0; i < arr.length; i++) {
- const item = arr[i];
- if (item.type == "text") {
- } else {
- switch (item.name) {
- case "img":
- break;
- }
- }
- result.push(item);
- if ((_a = item.children) == null ? void 0 : _a.length) {
- item.__handle = function(obj) {
- };
- try {
- await run(item.children, item);
- } catch (error) {
- rej(error);
- return;
- }
- }
- }
- res(result);
- });
- }
- try {
- rs({ html, htmlParses: await run(html) });
- } catch (error) {
- rj(error);
- }
- });
- }
- };
- _nc = new WeakMap();
- let QSCanvas2 = _QSCanvas;
- function filterPaintbrushProps(obj) {
- switch (obj == null ? void 0 : obj.textBaseline) {
- case "normal":
- if (isUni)
- obj.textBaseline = "alphabetic";
- break;
- case "hanging":
- if (isUni)
- obj.textBaseline = "top";
- break;
- case "ideographic":
- if (isUni)
- obj.textBaseline = "bottom";
- break;
- }
- switch (obj == null ? void 0 : obj.textAlign) {
- case "start":
- obj.textAlign = "left";
- break;
- case "end":
- obj.textAlign = "right";
- break;
- }
- }
- function hump2Hyphen(s) {
- return s.replace(/([A-Z])/g, "-$1").toLowerCase();
- }
- function hyphen2Hump(s) {
- if (!s)
- return "";
- const arr = s.split("-");
- for (var i = 1; i < arr.length; i++) {
- arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
- }
- return arr.join("");
- }
- function getPoints(x1, y1, x2, y2, pointCount, level) {
- let a, b, rSquare, k, kv, points = [];
- if (x1 === x2) {
- a = x1 + (y2 - y1) * level;
- b = y1 + (y2 - y1) / 2;
- rSquare = (x1 - a) ** 2 + (y1 - b) ** 2;
- } else if (y1 === y2) {
- a = x1 + (x2 - x1) / 2;
- b = y1 - (x2 - x1) * level;
- rSquare = (x1 - a) ** 2 + (y1 - b) ** 2;
- } else {
- let xc = (x1 + x2) / 2, yc = (y1 + y2) / 2, lenSquare = ((x2 - x1) ** 2 + (y2 - y1) ** 2) * level ** 2;
- k = (x2 - x1) / (y1 - y2);
- let l = yc - k * xc;
- let a1 = 1 + k ** 2, b1 = 2 * k * (l - yc) - 2 * xc, c1 = xc ** 2 + (l - yc) ** 2 - lenSquare;
- kv = -1 / k;
- a = (-b1 + Math.sqrt(b1 ** 2 - 4 * a1 * c1) * (kv > 0 && x2 > x1 || kv < 0 && x2 < x1 ? 1 : -1)) / (2 * a1);
- b = k * a + l;
- rSquare = (x1 - a) ** 2 + (y1 - b) ** 2;
- }
- if (x1 === x2 || Math.abs(kv) > 1) {
- let yDistance = y2 - y1;
- let yDis = yDistance / (pointCount + 1);
- for (let i = 0; i < pointCount; i++) {
- let y = y1 + yDis * (i + 1);
- let x = Math.sqrt(rSquare - (y - b) ** 2) * (y2 > y1 ? -1 : 1) + a;
- points.push([x, y]);
- }
- } else {
- let xDistance = x2 - x1;
- let xDis = xDistance / (pointCount + 1);
- for (let i = 0; i < pointCount; i++) {
- let x = x1 + xDis * (i + 1);
- let y = Math.sqrt(rSquare - (x - a) ** 2) * (x2 > x1 ? 1 : -1) + b;
- points.push([x, y]);
- }
- }
- return points;
- }
- var QRCodeAlg = function() {
- function unicodeFormat8(code) {
- var c0, c1, c2;
- if (code < 128) {
- return [code];
- } else if (code < 2048) {
- c0 = 192 + (code >> 6);
- c1 = 128 + (code & 63);
- return [c0, c1];
- } else {
- c0 = 224 + (code >> 12);
- c1 = 128 + (code >> 6 & 63);
- c2 = 128 + (code & 63);
- return [c0, c1, c2];
- }
- }
- function getUTF8Bytes(string) {
- var utf8codes = [];
- for (var i2 = 0; i2 < string.length; i2++) {
- var code = string.charCodeAt(i2);
- var utf8 = unicodeFormat8(code);
- for (var j = 0; j < utf8.length; j++) {
- utf8codes.push(utf8[j]);
- }
- }
- return utf8codes;
- }
- function QRCodeAlg2(data, errorCorrectLevel) {
- this.typeNumber = -1;
- this.errorCorrectLevel = errorCorrectLevel;
- this.modules = null;
- this.moduleCount = 0;
- this.dataCache = null;
- this.rsBlocks = null;
- this.totalDataCount = -1;
- this.data = data;
- this.utf8bytes = getUTF8Bytes(data);
- this.make();
- }
- QRCodeAlg2.prototype = { constructor: QRCodeAlg2, getModuleCount: function() {
- return this.moduleCount;
- }, make: function() {
- this.getRightType();
- this.dataCache = this.createData();
- this.createQrcode();
- }, makeImpl: function(maskPattern) {
- this.moduleCount = this.typeNumber * 4 + 17;
- this.modules = new Array(this.moduleCount);
- for (var row = 0; row < this.moduleCount; row++) {
- this.modules[row] = new Array(this.moduleCount);
- }
- this.setupPositionProbePattern(0, 0);
- this.setupPositionProbePattern(this.moduleCount - 7, 0);
- this.setupPositionProbePattern(0, this.moduleCount - 7);
- this.setupPositionAdjustPattern();
- this.setupTimingPattern();
- this.setupTypeInfo(true, maskPattern);
- if (this.typeNumber >= 7) {
- this.setupTypeNumber(true);
- }
- this.mapData(this.dataCache, maskPattern);
- }, setupPositionProbePattern: function(row, col) {
- for (var r = -1; r <= 7; r++) {
- if (row + r <= -1 || this.moduleCount <= row + r)
- continue;
- for (var c = -1; c <= 7; c++) {
- if (col + c <= -1 || this.moduleCount <= col + c)
- continue;
- if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
- this.modules[row + r][col + c] = true;
- } else {
- this.modules[row + r][col + c] = false;
- }
- }
- }
- }, createQrcode: function() {
- var minLostPoint = 0;
- var pattern = 0;
- var bestModules = null;
- for (var i2 = 0; i2 < 8; i2++) {
- this.makeImpl(i2);
- var lostPoint = QRUtil.getLostPoint(this);
- if (i2 == 0 || minLostPoint > lostPoint) {
- minLostPoint = lostPoint;
- pattern = i2;
- bestModules = this.modules;
- }
- }
- this.modules = bestModules;
- this.setupTypeInfo(false, pattern);
- if (this.typeNumber >= 7) {
- this.setupTypeNumber(false);
- }
- }, setupTimingPattern: function() {
- for (var r = 8; r < this.moduleCount - 8; r++) {
- if (this.modules[r][6] != null) {
- continue;
- }
- this.modules[r][6] = r % 2 == 0;
- if (this.modules[6][r] != null) {
- continue;
- }
- this.modules[6][r] = r % 2 == 0;
- }
- }, setupPositionAdjustPattern: function() {
- var pos = QRUtil.getPatternPosition(this.typeNumber);
- for (var i2 = 0; i2 < pos.length; i2++) {
- for (var j = 0; j < pos.length; j++) {
- var row = pos[i2];
- var col = pos[j];
- if (this.modules[row][col] != null) {
- continue;
- }
- for (var r = -2; r <= 2; r++) {
- for (var c = -2; c <= 2; c++) {
- if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
- this.modules[row + r][col + c] = true;
- } else {
- this.modules[row + r][col + c] = false;
- }
- }
- }
- }
- }
- }, setupTypeNumber: function(test) {
- var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
- for (var i2 = 0; i2 < 18; i2++) {
- var mod = !test && (bits >> i2 & 1) == 1;
- this.modules[Math.floor(i2 / 3)][i2 % 3 + this.moduleCount - 8 - 3] = mod;
- this.modules[i2 % 3 + this.moduleCount - 8 - 3][Math.floor(i2 / 3)] = mod;
- }
- }, setupTypeInfo: function(test, maskPattern) {
- var data = QRErrorCorrectLevel[this.errorCorrectLevel] << 3 | maskPattern;
- var bits = QRUtil.getBCHTypeInfo(data);
- for (var i2 = 0; i2 < 15; i2++) {
- var mod = !test && (bits >> i2 & 1) == 1;
- if (i2 < 6) {
- this.modules[i2][8] = mod;
- } else if (i2 < 8) {
- this.modules[i2 + 1][8] = mod;
- } else {
- this.modules[this.moduleCount - 15 + i2][8] = mod;
- }
- var mod = !test && (bits >> i2 & 1) == 1;
- if (i2 < 8) {
- this.modules[8][this.moduleCount - i2 - 1] = mod;
- } else if (i2 < 9) {
- this.modules[8][15 - i2 - 1 + 1] = mod;
- } else {
- this.modules[8][15 - i2 - 1] = mod;
- }
- }
- this.modules[this.moduleCount - 8][8] = !test;
- }, createData: function() {
- var buffer = new QRBitBuffer();
- var lengthBits = this.typeNumber > 9 ? 16 : 8;
- buffer.put(4, 4);
- buffer.put(this.utf8bytes.length, lengthBits);
- for (var i2 = 0, l = this.utf8bytes.length; i2 < l; i2++) {
- buffer.put(this.utf8bytes[i2], 8);
- }
- if (buffer.length + 4 <= this.totalDataCount * 8) {
- buffer.put(0, 4);
- }
- while (buffer.length % 8 != 0) {
- buffer.putBit(false);
- }
- while (true) {
- if (buffer.length >= this.totalDataCount * 8) {
- break;
- }
- buffer.put(QRCodeAlg2.PAD0, 8);
- if (buffer.length >= this.totalDataCount * 8) {
- break;
- }
- buffer.put(QRCodeAlg2.PAD1, 8);
- }
- return this.createBytes(buffer);
- }, createBytes: function(buffer) {
- var offset = 0;
- var maxDcCount = 0;
- var maxEcCount = 0;
- var length = this.rsBlock.length / 3;
- var rsBlocks = new Array();
- for (var i2 = 0; i2 < length; i2++) {
- var count = this.rsBlock[i2 * 3 + 0];
- var totalCount = this.rsBlock[i2 * 3 + 1];
- var dataCount = this.rsBlock[i2 * 3 + 2];
- for (var j = 0; j < count; j++) {
- rsBlocks.push([dataCount, totalCount]);
- }
- }
- var dcdata = new Array(rsBlocks.length);
- var ecdata = new Array(rsBlocks.length);
- for (var r = 0; r < rsBlocks.length; r++) {
- var dcCount = rsBlocks[r][0];
- var ecCount = rsBlocks[r][1] - dcCount;
- maxDcCount = Math.max(maxDcCount, dcCount);
- maxEcCount = Math.max(maxEcCount, ecCount);
- dcdata[r] = new Array(dcCount);
- for (var i2 = 0; i2 < dcdata[r].length; i2++) {
- dcdata[r][i2] = 255 & buffer.buffer[i2 + offset];
- }
- offset += dcCount;
- var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
- var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
- var modPoly = rawPoly.mod(rsPoly);
- ecdata[r] = new Array(rsPoly.getLength() - 1);
- for (var i2 = 0; i2 < ecdata[r].length; i2++) {
- var modIndex = i2 + modPoly.getLength() - ecdata[r].length;
- ecdata[r][i2] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
- }
- }
- var data = new Array(this.totalDataCount);
- var index = 0;
- for (var i2 = 0; i2 < maxDcCount; i2++) {
- for (var r = 0; r < rsBlocks.length; r++) {
- if (i2 < dcdata[r].length) {
- data[index++] = dcdata[r][i2];
- }
- }
- }
- for (var i2 = 0; i2 < maxEcCount; i2++) {
- for (var r = 0; r < rsBlocks.length; r++) {
- if (i2 < ecdata[r].length) {
- data[index++] = ecdata[r][i2];
- }
- }
- }
- return data;
- }, mapData: function(data, maskPattern) {
- var inc = -1;
- var row = this.moduleCount - 1;
- var bitIndex = 7;
- var byteIndex = 0;
- for (var col = this.moduleCount - 1; col > 0; col -= 2) {
- if (col == 6)
- col--;
- while (true) {
- for (var c = 0; c < 2; c++) {
- if (this.modules[row][col - c] == null) {
- var dark = false;
- if (byteIndex < data.length) {
- dark = (data[byteIndex] >>> bitIndex & 1) == 1;
- }
- var mask = QRUtil.getMask(maskPattern, row, col - c);
- if (mask) {
- dark = !dark;
- }
- this.modules[row][col - c] = dark;
- bitIndex--;
- if (bitIndex == -1) {
- byteIndex++;
- bitIndex = 7;
- }
- }
- }
- row += inc;
- if (row < 0 || this.moduleCount <= row) {
- row -= inc;
- inc = -inc;
- break;
- }
- }
- }
- } };
- QRCodeAlg2.PAD0 = 236;
- QRCodeAlg2.PAD1 = 17;
- var QRErrorCorrectLevel = [1, 0, 3, 2];
- var QRMaskPattern = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 };
- var QRUtil = { PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0, G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0, G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1, getBCHTypeInfo: function(data) {
- var d = data << 10;
- while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
- d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);
- }
- return (data << 10 | d) ^ QRUtil.G15_MASK;
- }, getBCHTypeNumber: function(data) {
- var d = data << 12;
- while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
- d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);
- }
- return data << 12 | d;
- }, getBCHDigit: function(data) {
- var digit = 0;
- while (data != 0) {
- digit++;
- data >>>= 1;
- }
- return digit;
- }, getPatternPosition: function(typeNumber) {
- return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
- }, getMask: function(maskPattern, i2, j) {
- switch (maskPattern) {
- case QRMaskPattern.PATTERN000:
- return (i2 + j) % 2 == 0;
- case QRMaskPattern.PATTERN001:
- return i2 % 2 == 0;
- case QRMaskPattern.PATTERN010:
- return j % 3 == 0;
- case QRMaskPattern.PATTERN011:
- return (i2 + j) % 3 == 0;
- case QRMaskPattern.PATTERN100:
- return (Math.floor(i2 / 2) + Math.floor(j / 3)) % 2 == 0;
- case QRMaskPattern.PATTERN101:
- return i2 * j % 2 + i2 * j % 3 == 0;
- case QRMaskPattern.PATTERN110:
- return (i2 * j % 2 + i2 * j % 3) % 2 == 0;
- case QRMaskPattern.PATTERN111:
- return (i2 * j % 3 + (i2 + j) % 2) % 2 == 0;
- default:
- throw new Error("bad maskPattern:" + maskPattern);
- }
- }, getErrorCorrectPolynomial: function(errorCorrectLength) {
- var a = new QRPolynomial([1], 0);
- for (var i2 = 0; i2 < errorCorrectLength; i2++) {
- a = a.multiply(new QRPolynomial([1, QRMath.gexp(i2)], 0));
- }
- return a;
- }, getLostPoint: function(qrCode) {
- var moduleCount = qrCode.getModuleCount(), lostPoint = 0, darkCount = 0;
- for (var row = 0; row < moduleCount; row++) {
- var sameCount = 0;
- var head = qrCode.modules[row][0];
- for (var col = 0; col < moduleCount; col++) {
- var current = qrCode.modules[row][col];
- if (col < moduleCount - 6) {
- if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) {
- if (col < moduleCount - 10) {
- if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) {
- lostPoint += 40;
- }
- } else if (col > 3) {
- if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) {
- lostPoint += 40;
- }
- }
- }
- }
- if (row < moduleCount - 1 && col < moduleCount - 1) {
- var count = 0;
- if (current)
- count++;
- if (qrCode.modules[row + 1][col])
- count++;
- if (qrCode.modules[row][col + 1])
- count++;
- if (qrCode.modules[row + 1][col + 1])
- count++;
- if (count == 0 || count == 4) {
- lostPoint += 3;
- }
- }
- if (head ^ current) {
- sameCount++;
- } else {
- head = current;
- if (sameCount >= 5) {
- lostPoint += 3 + sameCount - 5;
- }
- sameCount = 1;
- }
- if (current) {
- darkCount++;
- }
- }
- }
- for (var col = 0; col < moduleCount; col++) {
- var sameCount = 0;
- var head = qrCode.modules[0][col];
- for (var row = 0; row < moduleCount; row++) {
- var current = qrCode.modules[row][col];
- if (row < moduleCount - 6) {
- if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) {
- if (row < moduleCount - 10) {
- if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) {
- lostPoint += 40;
- }
- } else if (row > 3) {
- if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) {
- lostPoint += 40;
- }
- }
- }
- }
- if (head ^ current) {
- sameCount++;
- } else {
- head = current;
- if (sameCount >= 5) {
- lostPoint += 3 + sameCount - 5;
- }
- sameCount = 1;
- }
- }
- }
- var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
- lostPoint += ratio * 10;
- return lostPoint;
- } };
- var QRMath = { glog: function(n) {
- if (n < 1) {
- throw new Error("glog(" + n + ")");
- }
- return QRMath.LOG_TABLE[n];
- }, gexp: function(n) {
- while (n < 0) {
- n += 255;
- }
- while (n >= 256) {
- n -= 255;
- }
- return QRMath.EXP_TABLE[n];
- }, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256) };
- for (var i = 0; i < 8; i++) {
- QRMath.EXP_TABLE[i] = 1 << i;
- }
- for (var i = 8; i < 256; i++) {
- QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
- }
- for (var i = 0; i < 255; i++) {
- QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
- }
- function QRPolynomial(num, shift) {
- if (num.length == void 0) {
- throw new Error(num.length + "/" + shift);
- }
- var offset = 0;
- while (offset < num.length && num[offset] == 0) {
- offset++;
- }
- this.num = new Array(num.length - offset + shift);
- for (var i2 = 0; i2 < num.length - offset; i2++) {
- this.num[i2] = num[i2 + offset];
- }
- }
- QRPolynomial.prototype = { get: function(index) {
- return this.num[index];
- }, getLength: function() {
- return this.num.length;
- }, multiply: function(e) {
- var num = new Array(this.getLength() + e.getLength() - 1);
- for (var i2 = 0; i2 < this.getLength(); i2++) {
- for (var j = 0; j < e.getLength(); j++) {
- num[i2 + j] ^= QRMath.gexp(QRMath.glog(this.get(i2)) + QRMath.glog(e.get(j)));
- }
- }
- return new QRPolynomial(num, 0);
- }, mod: function(e) {
- var tl = this.getLength(), el = e.getLength();
- if (tl - el < 0) {
- return this;
- }
- var num = new Array(tl);
- for (var i2 = 0; i2 < tl; i2++) {
- num[i2] = this.get(i2);
- }
- while (num.length >= el) {
- var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0));
- for (var i2 = 0; i2 < e.getLength(); i2++) {
- num[i2] ^= QRMath.gexp(QRMath.glog(e.get(i2)) + ratio);
- }
- while (num[0] == 0) {
- num.shift();
- }
- }
- return new QRPolynomial(num, 0);
- } };
- var RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
- QRCodeAlg2.prototype.getRightType = function() {
- for (var typeNumber = 1; typeNumber < 41; typeNumber++) {
- var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel];
- if (rsBlock == void 0) {
- throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel);
- }
- var length = rsBlock.length / 3;
- var totalDataCount = 0;
- for (var i2 = 0; i2 < length; i2++) {
- var count = rsBlock[i2 * 3 + 0];
- var dataCount = rsBlock[i2 * 3 + 2];
- totalDataCount += dataCount * count;
- }
- var lengthBytes = typeNumber > 9 ? 2 : 1;
- if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) {
- this.typeNumber = typeNumber;
- this.rsBlock = rsBlock;
- this.totalDataCount = totalDataCount;
- break;
- }
- }
- };
- function QRBitBuffer() {
- this.buffer = new Array();
- this.length = 0;
- }
- QRBitBuffer.prototype = { get: function(index) {
- var bufIndex = Math.floor(index / 8);
- return this.buffer[bufIndex] >>> 7 - index % 8 & 1;
- }, put: function(num, length) {
- for (var i2 = 0; i2 < length; i2++) {
- this.putBit(num >>> length - i2 - 1 & 1);
- }
- }, putBit: function(bit) {
- var bufIndex = Math.floor(this.length / 8);
- if (this.buffer.length <= bufIndex) {
- this.buffer.push(0);
- }
- if (bit) {
- this.buffer[bufIndex] |= 128 >>> this.length % 8;
- }
- this.length++;
- } };
- return QRCodeAlg2;
- }();
- var htmlParse = function() {
- var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
- var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
- var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
- var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr");
- var block = makeMap("a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video");
- var inline = makeMap("abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var");
- var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
- var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected");
- var special = makeMap("script,style");
- function HTMLParser(html, handler) {
- var index;
- var chars;
- var match;
- var stack = [];
- var last = html;
- stack.last = function() {
- return this[this.length - 1];
- };
- while (html) {
- chars = true;
- if (!stack.last() || !special[stack.last()]) {
- if (html.indexOf("<!--") == 0) {
- index = html.indexOf("-->");
- if (index >= 0) {
- if (handler.comment) {
- handler.comment(html.substring(4, index));
- }
- html = html.substring(index + 3);
- chars = false;
- }
- } else if (html.indexOf("</") == 0) {
- match = html.match(endTag);
- if (match) {
- html = html.substring(match[0].length);
- match[0].replace(endTag, parseEndTag);
- chars = false;
- }
- } else if (html.indexOf("<") == 0) {
- match = html.match(startTag);
- if (match) {
- html = html.substring(match[0].length);
- match[0].replace(startTag, parseStartTag);
- chars = false;
- }
- }
- if (chars) {
- index = html.indexOf("<");
- var text = index < 0 ? html : html.substring(0, index);
- html = index < 0 ? "" : html.substring(index);
- if (handler.chars) {
- handler.chars(text);
- }
- }
- } else {
- html = html.replace(new RegExp("([\\s\\S]*?)</" + stack.last() + "[^>]*>"), function(all, text2) {
- text2 = text2.replace(/<!--([\s\S]*?)-->|<!\[CDATA\[([\s\S]*?)]]>/g, "$1$2");
- if (handler.chars) {
- handler.chars(text2);
- }
- return "";
- });
- parseEndTag("", stack.last());
- }
- if (html == last) {
- throw "Parse Error: " + html;
- }
- last = html;
- }
- parseEndTag();
- function parseStartTag(tag, tagName, rest, unary) {
- tagName = tagName.toLowerCase();
- if (block[tagName]) {
- while (stack.last() && inline[stack.last()]) {
- parseEndTag("", stack.last());
- }
- }
- if (closeSelf[tagName] && stack.last() == tagName) {
- parseEndTag("", tagName);
- }
- unary = empty[tagName] || !!unary;
- if (!unary) {
- stack.push(tagName);
- }
- if (handler.start) {
- var attrs = [];
- rest.replace(attr, function(match2, name) {
- var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : "";
- attrs.push({ name, value, escaped: value.replace(/(^|[^\\])"/g, '$1\\"') });
- });
- if (handler.start) {
- handler.start(tagName, attrs, unary);
- }
- }
- }
- function parseEndTag(tag, tagName) {
- if (!tagName) {
- var pos = 0;
- } else {
- for (var pos = stack.length - 1; pos >= 0; pos--) {
- if (stack[pos] == tagName) {
- break;
- }
- }
- }
- if (pos >= 0) {
- for (var i = stack.length - 1; i >= pos; i--) {
- if (handler.end) {
- handler.end(stack[i]);
- }
- }
- stack.length = pos;
- }
- }
- }
- function makeMap(str) {
- var obj = {};
- var items = str.split(",");
- for (var i = 0; i < items.length; i++) {
- obj[items[i]] = true;
- }
- return obj;
- }
- function removeDOCTYPE(html) {
- return html.replace(/<\?xml.*\?>\n/, "").replace(/<!doctype.*>\n/, "").replace(/<!DOCTYPE.*>\n/, "");
- }
- function parseAttrs(attrs) {
- return attrs.reduce(function(pre, attr2) {
- var value = attr2.value;
- var name = attr2.name;
- if (pre[name]) {
- pre[name] = pre[name] + " " + value;
- } else {
- pre[name] = value;
- }
- return pre;
- }, {});
- }
- function parseHtml(html) {
- html = removeDOCTYPE(html);
- var stacks = [];
- var results = { node: "root", children: [] };
- HTMLParser(html, { start: function start(tag, attrs, unary) {
- var node = { name: tag };
- if (attrs.length !== 0) {
- node.attrs = parseAttrs(attrs);
- }
- if (unary) {
- var parent = stacks[0] || results;
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- } else {
- stacks.unshift(node);
- }
- }, end: function end(tag) {
- var node = stacks.shift();
- if (node.name !== tag)
- console.error("invalid state: mismatch end tag");
- if (stacks.length === 0) {
- results.children.push(node);
- } else {
- var parent = stacks[0];
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- }
- }, chars: function chars(text) {
- var node = { type: "text", text };
- if (stacks.length === 0) {
- results.children.push(node);
- } else {
- var parent = stacks[0];
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- }
- }, comment: function comment(text) {
- var node = { node: "comment", text };
- var parent = stacks[0];
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- } });
- return results.children;
- }
- return parseHtml;
- }();
- var imgTools = /* @__PURE__ */ function() {
- function getLocalFilePath(path) {
- if (path.indexOf("_www") === 0 || path.indexOf("_doc") === 0 || path.indexOf("_documents") === 0 || path.indexOf("_downloads") === 0) {
- return path;
- }
- if (path.indexOf("file://") === 0) {
- return path;
- }
- if (path.indexOf("/storage/emulated/0/") === 0) {
- return path;
- }
- if (path.indexOf("/") === 0) {
- var localFilePath = plus.io.convertAbsoluteFileSystem(path);
- if (localFilePath !== path) {
- return localFilePath;
- } else {
- path = path.substr(1);
- }
- }
- return "_www/" + path;
- }
- function dataUrlToBase64(str) {
- var array = str.split(",");
- return array[array.length - 1];
- }
- var index = 0;
- function getNewFileId() {
- return Date.now() + String(index++);
- }
- function biggerThan(v1, v2) {
- var v1Array = v1.split(".");
- var v2Array = v2.split(".");
- var update = false;
- for (var index2 = 0; index2 < v2Array.length; index2++) {
- var diff = v1Array[index2] - v2Array[index2];
- if (diff !== 0) {
- update = diff > 0;
- break;
- }
- }
- return update;
- }
- function pathToBase64(path) {
- return new Promise(function(resolve, reject) {
- if (typeof window === "object" && "document" in window) {
- if (typeof FileReader === "function") {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", path, true);
- xhr.responseType = "blob";
- xhr.onload = function() {
- if (this.status === 200) {
- let fileReader = new FileReader();
- fileReader.onload = function(e) {
- resolve(e.target.result);
- };
- fileReader.onerror = reject;
- fileReader.readAsDataURL(this.response);
- }
- };
- xhr.onerror = reject;
- xhr.send();
- return;
- }
- var canvas = document.createElement("canvas");
- var c2x = canvas.getContext("2d");
- var img = new Image();
- img.onload = function() {
- canvas.width = img.width;
- canvas.height = img.height;
- c2x.drawImage(img, 0, 0);
- resolve(canvas.toDataURL());
- canvas.height = canvas.width = 0;
- };
- img.onerror = reject;
- img.src = path;
- return;
- }
- if (typeof plus === "object") {
- plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
- entry.file(function(file) {
- var fileReader = new plus.io.FileReader();
- fileReader.onload = function(data) {
- resolve(data.target.result);
- };
- fileReader.onerror = function(error) {
- reject(error);
- };
- fileReader.readAsDataURL(file);
- }, function(error) {
- reject(error);
- });
- }, function(error) {
- reject(error);
- });
- return;
- }
- if (typeof wx === "object" && wx.canIUse("getFileSystemManager")) {
- wx.getFileSystemManager().readFile({
- filePath: path,
- encoding: "base64",
- success: function(res) {
- resolve("data:image/png;base64," + res.data);
- },
- fail: function(error) {
- reject(error);
- }
- });
- return;
- }
- reject(new Error("not support"));
- });
- }
- function base64ToPath(base64) {
- return new Promise(function(resolve, reject) {
- if (typeof window === "object" && "document" in window) {
- base64 = base64.split(",");
- var type = base64[0].match(/:(.*?);/)[1];
- var str = atob(base64[1]);
- var n = str.length;
- var array = new Uint8Array(n);
- while (n--) {
- array[n] = str.charCodeAt(n);
- }
- return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type })));
- }
- var extName = base64.split(",")[0].match(/data\:\S+\/(\S+);/);
- if (extName) {
- extName = extName[1];
- } else {
- reject(new Error("base64 error"));
- }
- var fileName = getNewFileId() + "." + extName;
- if (typeof plus === "object") {
- var basePath = "_doc";
- var dirPath = "uniapp_temp";
- var filePath = basePath + "/" + dirPath + "/" + fileName;
- if (!biggerThan(plus.os.name === "Android" ? "1.9.9.80627" : "1.9.9.80472", plus.runtime.innerVersion)) {
- plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
- entry.getDirectory(dirPath, {
- create: true,
- exclusive: false
- }, function(entry2) {
- entry2.getFile(fileName, {
- create: true,
- exclusive: false
- }, function(entry3) {
- entry3.createWriter(function(writer) {
- writer.onwrite = function() {
- resolve(filePath);
- };
- writer.onerror = reject;
- writer.seek(0);
- writer.writeAsBinary(dataUrlToBase64(base64));
- }, reject);
- }, reject);
- }, reject);
- }, reject);
- return;
- }
- var bitmap = new plus.nativeObj.Bitmap(fileName);
- bitmap.loadBase64Data(base64, function() {
- bitmap.save(filePath, {}, function() {
- bitmap.clear();
- resolve(filePath);
- }, function(error) {
- bitmap.clear();
- reject(error);
- });
- }, function(error) {
- bitmap.clear();
- reject(error);
- });
- return;
- }
- function getEnvPath() {
- var _a, _b, _c, _d, _e, _f;
- if (typeof my === "object" && ((_a = my == null ? void 0 : my.env) == null ? void 0 : _a.USER_DATA_PATH)) {
- return my.env.USER_DATA_PATH;
- }
- if (typeof swan === "object" && ((_b = swan == null ? void 0 : swan.env) == null ? void 0 : _b.USER_DATA_PATH)) {
- return swan.env.USER_DATA_PATH;
- }
- if (typeof tt === "object" && ((_c = tt == null ? void 0 : tt.env) == null ? void 0 : _c.USER_DATA_PATH)) {
- return tt.env.USER_DATA_PATH;
- }
- if (typeof qq === "object" && ((_d = qq == null ? void 0 : qq.env) == null ? void 0 : _d.USER_DATA_PATH)) {
- return qq.env.USER_DATA_PATH;
- }
- if (typeof qh === "object" && ((_e = qh == null ? void 0 : qh.env) == null ? void 0 : _e.USER_DATA_PATH)) {
- return qh.env.USER_DATA_PATH;
- }
- if (typeof wx === "object" && ((_f = wx == null ? void 0 : wx.env) == null ? void 0 : _f.USER_DATA_PATH)) {
- return wx.env.USER_DATA_PATH;
- }
- return "https://user";
- }
- try {
- var filePath = getEnvPath() + "/" + fileName;
- uni.getFileSystemManager().writeFile({
- filePath,
- data: dataUrlToBase64(base64),
- encoding: "base64",
- success: function() {
- resolve(filePath);
- },
- fail: function(error) {
- reject(error);
- }
- });
- } catch (e) {
- reject(new Error("not support"));
- }
- });
- }
- return { pathToBase64, base64ToPath };
- }();
- if (notUnd(typeof module)) {
- module.exports = QSCanvas2;
- }
- return QSCanvas2;
- }();
- }
- });
- export default require_qs_canvas();
- //# sourceMappingURL=qs-canvas.js.map
|