1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const pngjs_1 = require("pngjs");
|
7 | const lodash_1 = require("lodash");
|
8 | const generate_1 = __importDefault(require("nanoid/generate"));
|
9 | const constants_1 = require("./constants");
|
10 | const ALPHABET = '01';
|
11 | function generateScreenshotMark() {
|
12 | // NOTE: 32-bit id
|
13 | const id = generate_1.default(ALPHABET, constants_1.MARK_LENGTH);
|
14 | // NOTE: array of RGB values
|
15 | const markSeed = lodash_1.flatten(lodash_1.map(id, bit => bit === '0' ? [0, 0, 0, 255] : [255, 255, 255, 255]));
|
16 | // NOTE: macOS browsers can't display an element, if it's CSS height is lesser than 1.
|
17 | // It happens on Retina displays, because they have more than 1 physical pixel in a CSS pixel.
|
18 | // So increase mark size by prepending transparent pixels before the actual mark.
|
19 | const imageData = lodash_1.times(constants_1.MARK_BYTES_PER_PIXEL * constants_1.MARK_LENGTH * (constants_1.MARK_HEIGHT - 1), lodash_1.constant(0)).concat(markSeed);
|
20 | const imageDataBuffer = Buffer.from(imageData);
|
21 | const pngImage = new pngjs_1.PNG({ width: constants_1.MARK_LENGTH, height: constants_1.MARK_HEIGHT });
|
22 | imageDataBuffer.copy(pngImage.data);
|
23 | const markData = 'data:image/png;base64,' + pngjs_1.PNG.sync.write(pngImage).toString('base64');
|
24 | return { markSeed, markData };
|
25 | }
|
26 | exports.generateScreenshotMark = generateScreenshotMark;
|
27 | function copyImagePart(pngImage, { clipLeft, clipTop, clipRight, clipBottom }) {
|
28 | const width = clipRight - clipLeft;
|
29 | const height = clipBottom - clipTop;
|
30 | const dstImage = new pngjs_1.PNG({ width, height });
|
31 | const stride = dstImage.width * constants_1.MARK_BYTES_PER_PIXEL;
|
32 | for (let i = 0; i < height; i++) {
|
33 | const srcStartIndex = (pngImage.width * (i + clipTop) + clipLeft) * constants_1.MARK_BYTES_PER_PIXEL;
|
34 | pngImage.data.copy(dstImage.data, stride * i, srcStartIndex, srcStartIndex + stride);
|
35 | }
|
36 | return dstImage;
|
37 | }
|
38 | exports.copyImagePart = copyImagePart;
|
39 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyZWVuc2hvdHMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBNEI7QUFDNUIsbUNBQXVEO0FBQ3ZELCtEQUF5QztBQUN6QywyQ0FBNkU7QUFFN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRXRCLFNBQWdCLHNCQUFzQjtJQUNsQyxrQkFBa0I7SUFDbEIsTUFBTSxFQUFFLEdBQUcsa0JBQVUsQ0FBQyxRQUFRLEVBQUUsdUJBQVcsQ0FBQyxDQUFDO0lBRTdDLDRCQUE0QjtJQUM1QixNQUFNLFFBQVEsR0FBRyxnQkFBTyxDQUFDLFlBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RixzRkFBc0Y7SUFDdEYsOEZBQThGO0lBQzlGLGlGQUFpRjtJQUNqRixNQUFNLFNBQVMsR0FBUyxjQUFLLENBQUMsZ0NBQW9CLEdBQUcsdUJBQVcsR0FBRyxDQUFDLHVCQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwSCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFVLElBQUksV0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUFXLEVBQUUsTUFBTSxFQUFFLHVCQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTdFLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixHQUFHLFdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV4RixPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFuQkQsd0RBbUJDO0FBRUQsU0FBZ0IsYUFBYSxDQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtJQUNqRixNQUFNLEtBQUssR0FBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLGdDQUFvQixDQUFDO0lBRXJELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLGdDQUFvQixDQUFDO1FBRXpGLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3hGO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQWZELHNDQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IHsgbWFwLCBmbGF0dGVuLCB0aW1lcywgY29uc3RhbnQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGdlbmVyYXRlSWQgZnJvbSAnbmFub2lkL2dlbmVyYXRlJztcbmltcG9ydCB7IE1BUktfTEVOR1RILCBNQVJLX0hFSUdIVCwgTUFSS19CWVRFU19QRVJfUElYRUwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IEFMUEhBQkVUID0gJzAxJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2NyZWVuc2hvdE1hcmsgKCkge1xuICAgIC8vIE5PVEU6IDMyLWJpdCBpZFxuICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVJZChBTFBIQUJFVCwgTUFSS19MRU5HVEgpO1xuXG4gICAgLy8gTk9URTogYXJyYXkgb2YgUkdCIHZhbHVlc1xuICAgIGNvbnN0IG1hcmtTZWVkID0gZmxhdHRlbihtYXAoaWQsIGJpdCA9PiBiaXQgPT09ICcwJyA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMjU1LCAyNTUsIDI1NV0pKTtcblxuICAgIC8vIE5PVEU6IG1hY09TIGJyb3dzZXJzIGNhbid0IGRpc3BsYXkgYW4gZWxlbWVudCwgaWYgaXQncyBDU1MgaGVpZ2h0IGlzIGxlc3NlciB0aGFuIDEuXG4gICAgLy8gSXQgaGFwcGVucyBvbiBSZXRpbmEgZGlzcGxheXMsIGJlY2F1c2UgdGhleSBoYXZlIG1vcmUgdGhhbiAxIHBoeXNpY2FsIHBpeGVsIGluIGEgQ1NTIHBpeGVsLlxuICAgIC8vIFNvIGluY3JlYXNlIG1hcmsgc2l6ZSBieSBwcmVwZW5kaW5nIHRyYW5zcGFyZW50IHBpeGVscyBiZWZvcmUgdGhlIGFjdHVhbCBtYXJrLlxuICAgIGNvbnN0IGltYWdlRGF0YSAgICAgICA9IHRpbWVzKE1BUktfQllURVNfUEVSX1BJWEVMICogTUFSS19MRU5HVEggKiAoTUFSS19IRUlHSFQgLSAxKSwgY29uc3RhbnQoMCkpLmNvbmNhdChtYXJrU2VlZCk7XG4gICAgY29uc3QgaW1hZ2VEYXRhQnVmZmVyID0gQnVmZmVyLmZyb20oaW1hZ2VEYXRhKTtcbiAgICBjb25zdCBwbmdJbWFnZSAgICAgICAgPSBuZXcgUE5HKHsgd2lkdGg6IE1BUktfTEVOR1RILCBoZWlnaHQ6IE1BUktfSEVJR0hUIH0pO1xuXG4gICAgaW1hZ2VEYXRhQnVmZmVyLmNvcHkocG5nSW1hZ2UuZGF0YSk7XG5cbiAgICBjb25zdCBtYXJrRGF0YSA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIFBORy5zeW5jLndyaXRlKHBuZ0ltYWdlKS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICByZXR1cm4geyBtYXJrU2VlZCwgbWFya0RhdGEgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlJbWFnZVBhcnQgKHBuZ0ltYWdlLCB7IGNsaXBMZWZ0LCBjbGlwVG9wLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20gfSkge1xuICAgIGNvbnN0IHdpZHRoICA9IGNsaXBSaWdodCAtIGNsaXBMZWZ0O1xuICAgIGNvbnN0IGhlaWdodCA9IGNsaXBCb3R0b20gLSBjbGlwVG9wO1xuXG4gICAgY29uc3QgZHN0SW1hZ2UgPSBuZXcgUE5HKHsgd2lkdGgsIGhlaWdodCB9KTtcblxuICAgIGNvbnN0IHN0cmlkZSA9IGRzdEltYWdlLndpZHRoICogTUFSS19CWVRFU19QRVJfUElYRUw7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNyY1N0YXJ0SW5kZXggPSAocG5nSW1hZ2Uud2lkdGggKiAoaSArIGNsaXBUb3ApICsgY2xpcExlZnQpICogTUFSS19CWVRFU19QRVJfUElYRUw7XG5cbiAgICAgICAgcG5nSW1hZ2UuZGF0YS5jb3B5KGRzdEltYWdlLmRhdGEsIHN0cmlkZSAqIGksIHNyY1N0YXJ0SW5kZXgsIHNyY1N0YXJ0SW5kZXggKyBzdHJpZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBkc3RJbWFnZTtcbn1cbiJdfQ== |
\ | No newline at end of file |