emoji-net
Version:
EmojiNet is an image to emoji recognizer based on MobileNet / Google Emoji Scavenger Hunt
146 lines • 5.05 kB
JavaScript
;
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