Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add pdf format #78

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@activate-inc:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=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
2 changes: 1 addition & 1 deletion dist/awesome-qr.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions lib/awesome-qr.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ export declare type Options = {
* @deafultValue 0.4
*/
dotScale?: number;
file?: string;
};
export declare class AwesomeQR {
private canvas;
Expand Down
59 changes: 32 additions & 27 deletions lib/awesome-qr.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwesomeQR = void 0;
var canvas_1 = require("canvas");
var skia_canvas_1 = require("skia-canvas");
var gifuct_js_1 = require("./gifuct-js");
var qrcode_1 = require("./qrcode");
var GIFEncoder_1 = __importDefault(require("./gif.js/GIFEncoder"));
Expand Down Expand Up @@ -94,7 +94,7 @@ var AwesomeQR = /** @class */ (function () {
_options.components.alignment.scale = _options.dotScale;
}
this.options = _options;
this.canvas = canvas_1.createCanvas(options.size, options.size);
this.canvas = new skia_canvas_1.Canvas(options.size, options.size);
this.canvasContext = this.canvas.getContext("2d");
this.qrCode = new qrcode_1.QRCodeModel(-1, this.options.correctLevel);
if (Number.isInteger(this.options.maskPattern)) {
Expand Down Expand Up @@ -139,7 +139,7 @@ var AwesomeQR = /** @class */ (function () {
var count = 0;
height = image.naturalHeight || image.height;
width = image.naturalWidth || image.width;
var canvas = canvas_1.createCanvas(width, height);
var canvas = new skia_canvas_1.Canvas(width, height);
var context = canvas.getContext("2d");
if (!context) {
return defaultRGB;
Expand Down Expand Up @@ -200,13 +200,14 @@ var AwesomeQR = /** @class */ (function () {
AwesomeQR.prototype._draw = function () {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
return __awaiter(this, void 0, void 0, function () {
var nCount, rawSize, rawMargin, margin, rawViewportSize, whiteMargin, backgroundDimming, nSize, viewportSize, size, mainCanvas, mainCanvasContext, backgroundCanvas, backgroundCanvasContext, parsedGIFBackground, gifFrames, gif, r, g, b, count, i, c, backgroundImage, avgRGB, alignmentPatternCenters, dataScale, dataXyOffset, row, col, bIsDark, isBlkPosCtr, isTiming, isProtected, i, nLeft, nTop, inAgnRange, cornerAlignmentCenter, protectorStyle, i, j, agnX, agnY, timingScale, timingXyOffset, i, cornerAlignmentScale, cornerAlignmentXyOffset, alignmentScale, alignmentXyOffset, i, j, agnX, agnY, logoImage, logoScale, logoMargin, logoCornerRadius, logoSize, x, y, oldGlobalCompositeOperation, gifOutput_1, backgroundCanvas_1, backgroundCanvasContext_1, patchCanvas_1, patchCanvasContext_1, patchData_1, u8array, binary, outCanvas, outCanvasContext;
var nCount, rawSize, rawMargin, file, margin, rawViewportSize, whiteMargin, backgroundDimming, nSize, viewportSize, size, mainCanvas, mainCanvasContext, backgroundCanvas, backgroundCanvasContext, parsedGIFBackground, gifFrames, gif, r, g, b, count, i, c, backgroundImage, avgRGB, alignmentPatternCenters, dataScale, dataXyOffset, row, col, bIsDark, isBlkPosCtr, isTiming, isProtected, i, nLeft, nTop, inAgnRange, cornerAlignmentCenter, protectorStyle, i, j, agnX, agnY, timingScale, timingXyOffset, i, cornerAlignmentScale, cornerAlignmentXyOffset, alignmentScale, alignmentXyOffset, i, j, agnX, agnY, logoImage, logoScale, logoMargin, logoCornerRadius, logoSize, x, y, oldGlobalCompositeOperation, gifOutput_1, backgroundCanvas_1, backgroundCanvasContext_1, patchCanvas_1, patchCanvasContext_1, patchData_1, u8array, binary, outCanvas, outCanvasContext, format;
return __generator(this, function (_v) {
switch (_v.label) {
case 0:
nCount = (_a = this.qrCode) === null || _a === void 0 ? void 0 : _a.moduleCount;
rawSize = this.options.size;
rawMargin = this.options.margin;
file = this.options.file || 'png';
if (rawMargin < 0 || rawMargin * 2 >= rawSize) {
rawMargin = 0;
}
Expand All @@ -217,20 +218,20 @@ var AwesomeQR = /** @class */ (function () {
nSize = Math.ceil(rawViewportSize / nCount);
viewportSize = nSize * nCount;
size = viewportSize + 2 * margin;
mainCanvas = canvas_1.createCanvas(size, size);
mainCanvas = new skia_canvas_1.Canvas(size, size);
mainCanvasContext = mainCanvas.getContext("2d");
this._clear();
// Translate to make the top and left margins off the viewport
mainCanvasContext.save();
mainCanvasContext.translate(margin, margin);
backgroundCanvas = canvas_1.createCanvas(size, size);
backgroundCanvas = new skia_canvas_1.Canvas(size, size);
backgroundCanvasContext = backgroundCanvas.getContext("2d");
parsedGIFBackground = null;
gifFrames = [];
if (!!!this.options.gifBackground) return [3 /*break*/, 1];
gif = gifuct_js_1.parseGIF(this.options.gifBackground);
gif = (0, gifuct_js_1.parseGIF)(this.options.gifBackground);
parsedGIFBackground = gif;
gifFrames = gifuct_js_1.decompressFrames(gif, true);
gifFrames = (0, gifuct_js_1.decompressFrames)(gif, true);
if (this.options.autoColor) {
r = 0, g = 0, b = 0;
count = 0;
Expand All @@ -248,17 +249,17 @@ var AwesomeQR = /** @class */ (function () {
r = ~~(r / count);
g = ~~(g / count);
b = ~~(b / count);
this.options.colorDark = "rgb(" + r + "," + g + "," + b + ")";
this.options.colorDark = "rgb(".concat(r, ",").concat(g, ",").concat(b, ")");
}
return [3 /*break*/, 4];
case 1:
if (!!!this.options.backgroundImage) return [3 /*break*/, 3];
return [4 /*yield*/, canvas_1.loadImage(this.options.backgroundImage)];
return [4 /*yield*/, (0, skia_canvas_1.loadImage)(this.options.backgroundImage)];
case 2:
backgroundImage = _v.sent();
if (this.options.autoColor) {
avgRGB = AwesomeQR._getAverageRGB(backgroundImage);
this.options.colorDark = "rgb(" + avgRGB.r + "," + avgRGB.g + "," + avgRGB.b + ")";
this.options.colorDark = "rgb(".concat(avgRGB.r, ",").concat(avgRGB.g, ",").concat(avgRGB.b, ")");
}
backgroundCanvasContext.drawImage(backgroundImage, 0, 0, backgroundImage.width, backgroundImage.height, 0, 0, size, size);
backgroundCanvasContext.rect(0, 0, size, size);
Expand Down Expand Up @@ -399,7 +400,7 @@ var AwesomeQR = /** @class */ (function () {
mainCanvasContext.fillRect(-margin, -margin, margin, size);
}
if (!!!this.options.logoImage) return [3 /*break*/, 6];
return [4 /*yield*/, canvas_1.loadImage(this.options.logoImage)];
return [4 /*yield*/, (0, skia_canvas_1.loadImage)(this.options.logoImage)];
case 5:
logoImage = _v.sent();
logoScale = this.options.logoScale;
Expand Down Expand Up @@ -450,31 +451,31 @@ var AwesomeQR = /** @class */ (function () {
}
var _a = frame.dims, width = _a.width, height = _a.height;
if (!backgroundCanvas_1) {
backgroundCanvas_1 = canvas_1.createCanvas(width, height);
backgroundCanvas_1 = new skia_canvas_1.Canvas(width, height);
backgroundCanvasContext_1 = backgroundCanvas_1.getContext("2d");
backgroundCanvasContext_1.rect(0, 0, backgroundCanvas_1.width, backgroundCanvas_1.height);
backgroundCanvasContext_1.fillStyle = "#ffffff";
backgroundCanvasContext_1.fill();
}
if (!patchCanvas_1 || !patchData_1 || width !== patchCanvas_1.width || height !== patchCanvas_1.height) {
patchCanvas_1 = canvas_1.createCanvas(width, height);
patchCanvas_1 = new skia_canvas_1.Canvas(width, height);
patchCanvasContext_1 = patchCanvas_1.getContext("2d");
patchData_1 = patchCanvasContext_1.createImageData(width, height);
}
patchData_1.data.set(frame.patch);
patchCanvasContext_1.putImageData(patchData_1, 0, 0);
backgroundCanvasContext_1.drawImage(patchCanvas_1, frame.dims.left, frame.dims.top);
var unscaledCanvas = canvas_1.createCanvas(size, size);
backgroundCanvasContext_1.drawImage(patchCanvas_1.getContext('2d').canvas, frame.dims.left, frame.dims.top);
var unscaledCanvas = new skia_canvas_1.Canvas(size, size);
var unscaledCanvasContext = unscaledCanvas.getContext("2d");
unscaledCanvasContext.drawImage(backgroundCanvas_1, 0, 0, size, size);
unscaledCanvasContext.drawImage(backgroundCanvas_1.getContext('2d').canvas, 0, 0, size, size);
unscaledCanvasContext.rect(0, 0, size, size);
unscaledCanvasContext.fillStyle = backgroundDimming;
unscaledCanvasContext.fill();
unscaledCanvasContext.drawImage(mainCanvas, 0, 0, size, size);
unscaledCanvasContext.drawImage(mainCanvas.getContext('2d').canvas, 0, 0, size, size);
// Scale the final image
var outCanvas = canvas_1.createCanvas(rawSize, rawSize);
var outCanvas = new skia_canvas_1.Canvas(rawSize, rawSize);
var outCanvasContext = outCanvas.getContext("2d");
outCanvasContext.drawImage(unscaledCanvas, 0, 0, rawSize, rawSize);
outCanvasContext.drawImage(unscaledCanvas.getContext('2d').canvas, 0, 0, rawSize, rawSize);
gifOutput_1.addFrame(outCanvasContext.getImageData(0, 0, outCanvas.width, outCanvas.height).data);
});
if (!gifOutput_1) {
Expand All @@ -484,22 +485,25 @@ var AwesomeQR = /** @class */ (function () {
if (isElement(this.canvas)) {
u8array = gifOutput_1.stream().toFlattenUint8Array();
binary = u8array.reduce(function (bin, u8) { return bin + String.fromCharCode(u8); }, "");
return [2 /*return*/, Promise.resolve("data:image/gif;base64," + window.btoa(binary))];
return [2 /*return*/, Promise.resolve("data:image/gif;base64,".concat(window.btoa(binary)))];
}
return [2 /*return*/, Promise.resolve(Buffer.from(gifOutput_1.stream().toFlattenUint8Array()))];
}
else {
// Swap and merge the foreground and the background
backgroundCanvasContext.drawImage(mainCanvas, 0, 0, size, size);
mainCanvasContext.drawImage(backgroundCanvas, -margin, -margin, size, size);
outCanvas = canvas_1.createCanvas(rawSize, rawSize);
backgroundCanvasContext.drawImage(mainCanvas.getContext('2d').canvas, 0, 0, size, size);
mainCanvasContext.drawImage(backgroundCanvas.getContext('2d').canvas, -margin, -margin, size, size);
outCanvas = new skia_canvas_1.Canvas(rawSize, rawSize);
outCanvasContext = outCanvas.getContext("2d");
outCanvasContext.drawImage(mainCanvas, 0, 0, rawSize, rawSize);
outCanvasContext.drawImage(mainCanvas.getContext('2d').canvas, 0, 0, rawSize, rawSize);
this.canvas = outCanvas;
format = this.options.gifBackground ? "gif" : file;
if (isElement(this.canvas)) {
return [2 /*return*/, Promise.resolve(this.canvas.toDataURL())];
// @ts-ignore
return [2 /*return*/, Promise.resolve(this.canvas.toDataURL(format))];
}
return [2 /*return*/, Promise.resolve(this.canvas.toBuffer())];
// @ts-ignore
return [2 /*return*/, Promise.resolve(this.canvas.toBuffer(format))];
}
return [2 /*return*/];
}
Expand Down Expand Up @@ -540,6 +544,7 @@ var AwesomeQR = /** @class */ (function () {
whiteMargin: true,
components: AwesomeQR.defaultComponentOptions,
autoColor: true,
file: "png",
};
return AwesomeQR;
}());
Expand Down
11 changes: 6 additions & 5 deletions lib/gif.js/GIFEncoder.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ declare class GIFEncoder {
pixels: Uint8Array | null;
indexedPixels: Uint8Array | null;
colorDepth: number | null;
colorTab: any;
neuQuant: import("./TypedNeuQuant.js") | null;
colorTab: true | any[] | null;
neuQuant: NeuQuant | null;
usedEntry: any[];
palSize: number;
dispose: number;
firstFrame: boolean;
sample: number;
dither: boolean;
globalPalette: any;
globalPalette: boolean;
out: ByteArray;
setDelay(milliseconds: any): void;
setFrameRate(fps: any): void;
Expand Down Expand Up @@ -49,6 +49,7 @@ declare class GIFEncoder {
writePixels(): void;
stream(): ByteArray;
}
import NeuQuant = require("./TypedNeuQuant.js");
declare function ByteArray(): void;
declare class ByteArray {
page: number;
Expand All @@ -62,6 +63,6 @@ declare class ByteArray {
writeBytes(array: any, offset: any, length: any): void;
}
declare namespace ByteArray {
export const pageSize: number;
export const charMap: {};
const pageSize: number;
const charMap: {};
}
3 changes: 2 additions & 1 deletion lib/gifuct-js/deinterlace.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.deinterlace = void 0;
exports.deinterlace = function (pixels, width) {
var deinterlace = function (pixels, width) {
var newPixels = new Array(pixels.length);
var rows = pixels.length / width;
var cpRow = function (toRow, fromRow) {
Expand All @@ -23,3 +23,4 @@ exports.deinterlace = function (pixels, width) {
}
return newPixels;
};
exports.deinterlace = deinterlace;
17 changes: 10 additions & 7 deletions lib/gifuct-js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ var js_binary_schema_parser_1 = require("js-binary-schema-parser");
var uint8_1 = require("js-binary-schema-parser/lib/parsers/uint8");
var deinterlace_1 = require("./deinterlace");
var lzw_1 = require("./lzw");
exports.parseGIF = function (arrayBuffer) {
var parseGIF = function (arrayBuffer) {
var byteData = new Uint8Array(arrayBuffer);
return js_binary_schema_parser_1.parse(uint8_1.buildStream(byteData), gif_1.default);
return (0, js_binary_schema_parser_1.parse)((0, uint8_1.buildStream)(byteData), gif_1.default);
};
exports.parseGIF = parseGIF;
var generatePatch = function (image) {
var totalPixels = image.pixels.length;
var patchData = new Uint8ClampedArray(totalPixels * 4);
Expand All @@ -27,7 +28,7 @@ var generatePatch = function (image) {
}
return patchData;
};
exports.decompressFrame = function (frame, gct, buildImagePatch) {
var decompressFrame = function (frame, gct, buildImagePatch) {
if (!frame.image) {
console.warn('gif frame does not have associated image.');
return;
Expand All @@ -36,10 +37,10 @@ exports.decompressFrame = function (frame, gct, buildImagePatch) {
// get the number of pixels
var totalPixels = image.descriptor.width * image.descriptor.height;
// do lzw decompression
var pixels = lzw_1.lzw(image.data.minCodeSize, image.data.blocks, totalPixels);
var pixels = (0, lzw_1.lzw)(image.data.minCodeSize, image.data.blocks, totalPixels);
// deal with interlacing if necessary
if (image.descriptor.lct.interlaced) {
pixels = deinterlace_1.deinterlace(pixels, image.descriptor.width);
pixels = (0, deinterlace_1.deinterlace)(pixels, image.descriptor.width);
}
var resultImage = {
pixels: pixels,
Expand Down Expand Up @@ -72,8 +73,10 @@ exports.decompressFrame = function (frame, gct, buildImagePatch) {
}
return resultImage;
};
exports.decompressFrames = function (parsedGif, buildImagePatches) {
exports.decompressFrame = decompressFrame;
var decompressFrames = function (parsedGif, buildImagePatches) {
return parsedGif.frames
.filter(function (f) { return f.image; })
.map(function (f) { return exports.decompressFrame(f, parsedGif.gct, buildImagePatches); });
.map(function (f) { return (0, exports.decompressFrame)(f, parsedGif.gct, buildImagePatches); });
};
exports.decompressFrames = decompressFrames;
3 changes: 2 additions & 1 deletion lib/gifuct-js/lzw.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.lzw = void 0;
exports.lzw = function (minCodeSize, data, pixelCount) {
var lzw = function (minCodeSize, data, pixelCount) {
var MAX_STACK_SIZE = 4096;
var nullCode = -1;
var npix = pixelCount;
Expand Down Expand Up @@ -95,3 +95,4 @@ exports.lzw = function (minCodeSize, data, pixelCount) {
}
return dstPixels;
};
exports.lzw = lzw;
3 changes: 2 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwesomeQR = void 0;
__exportStar(require("./qrcode"), exports);
var awesome_qr_1 = require("./awesome-qr");
Object.defineProperty(exports, "AwesomeQR", { enumerable: true, get: function () { return awesome_qr_1.AwesomeQR; } });