UNPKG

emoji-net

Version:

EmojiNet is an image to emoji recognizer based on MobileNet / Google Emoji Scavenger Hunt

146 lines 5.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.toBuffer = exports.toDataURL = exports.resizeImage = exports.loadImage = exports.imageToData = exports.imageMd5 = exports.dataToImage = exports.cropImage = exports.createImageData = exports.createCanvas = exports.saveImage = void 0; const crypto_1 = __importDefault(require("crypto")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const canvas_1 = require("canvas"); // const _createCanvas = require('canvas').createCanvas // const _createImageData = require('canvas').createImageData // const _loadImage = require('canvas').loadImage function imageMd5(image) { if (image.src) { // HTMLImageElement image = imageToData(image); } else { image = image; } const buffer = Buffer.from(image.data.buffer); return crypto_1.default.createHash('md5') .update(buffer) .digest('hex'); } exports.imageMd5 = imageMd5; function imageToData(image) { const canvas = createCanvas(image.width, image.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } ctx.drawImage(image, 0, 0, image.width, image.height); const imageData = ctx.getImageData(0, 0, image.width, image.height); return imageData; } exports.imageToData = imageToData; async function dataToImage(data) { const canvas = createCanvas(data.width, data.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } ctx.putImageData(data, 0, 0); const dataUrl = canvas.toDataURL(); const image = await loadImage(dataUrl); return image; } exports.dataToImage = dataToImage; function cropImage(imageData, x, y, width, height) { const canvas = createCanvas(imageData.width, imageData.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData // Issues #12 negative x/y value bug ctx.putImageData(imageData, 0, 0); const croppedImageData = ctx.getImageData(x, y, width, height); return croppedImageData; } exports.cropImage = cropImage; async function resizeImage(image, width, height) { if (image.data) { // ImageData image = await dataToImage(image); } else { image = image; } const canvas = createCanvas(width, height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } ctx.drawImage(image, 0, 0, width, height); const resizedImage = ctx.getImageData(0, 0, width, height); return resizedImage; } exports.resizeImage = resizeImage; async function loadImage(src) { const image = await canvas_1.loadImage(src); if (!image) { throw new Error('no image for src:' + src); } return image; } exports.loadImage = loadImage; function createCanvas(width, height) { const canvas = canvas_1.createCanvas(width, height); return canvas; } exports.createCanvas = createCanvas; async function saveImage(imageData, filename) { const ext = path_1.default.extname(filename); const canvas = createCanvas(imageData.width, imageData.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('no ctx'); } ctx.putImageData(imageData, 0, 0); let stream; switch (ext) { case '.jpg': stream = canvas.createJPEGStream(); break; case '.png': stream = canvas.createPNGStream(); break; default: throw new Error('unsupported type: ' + ext); } const outFile = fs_1.default.createWriteStream(filename); stream.pipe(outFile); return new Promise((resolve, reject) => { outFile.on('close', resolve); outFile.on('error', reject); stream.on('error', reject); }); } exports.saveImage = saveImage; function createImageData(array, width, height) { return canvas_1.createImageData(array, width, height); } exports.createImageData = createImageData; function toDataURL(data) { const canvas = createCanvas(data.width, data.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } ctx.putImageData(data, 0, 0); return canvas.toDataURL(); } exports.toDataURL = toDataURL; function toBuffer(data) { const canvas = createCanvas(data.width, data.height); const ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('getContext found null'); } ctx.putImageData(data, 0, 0); // https://github.com/Automattic/node-canvas#canvastobuffer return canvas.toBuffer(); } exports.toBuffer = toBuffer; //# sourceMappingURL=canvas-utils.js.map