@magicfun1241/anime4k
Version:
Image upscale
81 lines (80 loc) • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const os = require("os");
const fs = require("fs");
const path = require("path");
const nanoid_1 = require("nanoid");
const child_process_1 = require("child_process");
const directories_1 = require("./directories");
const executablePath = path.join(__dirname, "../bin", os.platform() === 'win32' ? 'Anime4KCPP_CLI.exe' : 'Anime4KCPP_CLI');
function convert(input, output, options) {
return new Promise((resolve, reject) => {
const args = [
"--input",
input,
"--output",
output,
"--zoomFactor",
options.zoomFactor.toString()
];
if (options.gpuAcceleration)
args.push("--GPUMode");
switch (options.mode.type) {
case "cnn":
args.push("--CNNMode", "--HDN", "--HDNLevel", options.mode.hdn.level == null ? "1" : options.mode.hdn.level.toString());
break;
}
const child = child_process_1.spawn(executablePath, args, {
// stdio: [ "inherit", "inherit", "inherit" ],
cwd: directories_1.binaryDirectory
});
child.on("exit", () => {
resolve();
});
});
}
function anime4k(input) {
let mode;
let gpuAcceleration = false;
let zoomFactor = 2;
const context = {
toBuffer() {
return new Promise((resolve, reject) => {
const tmp = path.join(directories_1.tempDirectory, nanoid_1.nanoid(12));
convert(input, tmp, {
mode: mode,
zoomFactor: zoomFactor,
gpuAcceleration: gpuAcceleration
}).then(() => {
resolve(fs.readFileSync(tmp));
}).catch(err => reject(err));
});
},
toFile(path) {
return new Promise((resolve, reject) => {
convert(input, path, {
mode: mode,
zoomFactor: zoomFactor,
gpuAcceleration: gpuAcceleration
}).then(() => {
resolve();
}).catch(err => reject(err));
});
},
gpuAcceleration(value) {
gpuAcceleration = value;
return context;
},
cnnMode(value) {
mode = value;
mode.type = "cnn";
return context;
},
zoomFactor(value) {
zoomFactor = value;
return context;
}
};
return context;
}
exports.default = anime4k;