cvat/tests/cypress/plugins/imageGenerator/addPlugin.js

66 lines
1.9 KiB
JavaScript

// Copyright (C) 2020-2022 Intel Corporation
//
// SPDX-License-Identifier: MIT
/* eslint no-use-before-define: 0 */
exports.imageGenerator = imageGenerator;
exports.bufferToImage = bufferToImage;
const path = require('path');
const fs = require('fs-extra');
const jimp = require('jimp');
function createImage(width, height, color) {
return new Promise((resolve, reject) => {
// eslint-disable-next-line new-cap, no-new
new jimp(width, height, color, ((err, img) => {
if (err) reject(err);
resolve(img);
}));
});
}
function createImageFromBuffer(bitmapObj) {
return new Promise((resolve, reject) => {
// eslint-disable-next-line new-cap, no-new
new jimp(bitmapObj, (err, image) => {
if (err) reject(err);
resolve(image);
});
});
}
function appendText(image, posX, posY, message, index) {
return new Promise((resolve, reject) => {
jimp.loadFont(jimp.FONT_SANS_64_BLACK, (err, font) => {
if (err) reject(err);
image.print(font, Number(posX), Number(posY), `${message}. Num ${index}`);
resolve(image);
});
});
}
async function imageGenerator(args) {
const {
directory, fileName, width, height, color, posX, posY, message, count, extension,
} = args;
const file = path.join(directory, fileName);
for (let i = 1; i <= count; i++) {
let image = await createImage(width, height, color);
image = await appendText(image, posX, posY, message, i);
image.write(`${file}_${i}.${extension}`);
}
return null;
}
async function bufferToImage(args) {
const {
directory, fileName, extension, buffer,
} = args;
let file = null;
fs.mkdirp(directory);
file = path.join(directory, `${fileName}.${extension}`);
const image = await createImageFromBuffer(Buffer.from(buffer.data));
image.write(file);
return fs.pathExists(file);
}