node-webp.ts
Version:
Convert image to webp and compress to save space with `cwebp` system program.
74 lines (73 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cwebp = void 0;
const child_process_1 = require("child_process");
function cwebp(options, cb) {
let cmd = [];
if (options.preset) {
cmd.push('-preset', options.preset);
}
if (options.hint) {
cmd.push('-hint', options.hint);
}
if (options.low_memory) {
cmd.push('-low_memory');
}
if (options.lossless) {
cmd.push('-lossless');
}
if (options.near_lossless) {
cmd.push('-near_lossless', String(options.near_lossless));
}
if (options.method) {
cmd.push('-m', String(options.method));
}
if (options.quality) {
cmd.push('-q', String(options.quality));
}
if (options.size) {
cmd.push('-size', String(options.size));
}
if (options.auto_filter) {
cmd.push('-af');
}
if (options.deblocking_filter) {
cmd.push('-f', String(options.deblocking_filter));
}
if (options.spatial_noise_shaping) {
cmd.push('-sns', String(options.spatial_noise_shaping));
}
if (options.metadata) {
cmd.push('-metadata', options.metadata);
}
if (options.crop) {
cmd.push('-crop', String(options.crop.left), String(options.crop.top), String(options.crop.width), String(options.crop.height));
}
if (options.resize) {
cmd.push('-resize', String(options.resize.width), String(options.resize.height));
}
cmd.push('-o', options.output);
cmd.push('--', options.input);
if (cb) {
let child = (0, child_process_1.spawn)('cwebp', cmd);
child.on('close', cb);
}
else {
return new Promise((resolve, reject) => {
let child = (0, child_process_1.spawn)('cwebp', cmd);
let error = '';
child.stderr?.on('data', chunk => {
error += chunk;
});
child.on('close', code => {
if (!code) {
resolve(code);
}
else {
reject(error);
}
});
});
}
}
exports.cwebp = cwebp;