UNPKG

node-webp.ts

Version:

Convert image to webp and compress to save space with `cwebp` system program.

74 lines (73 loc) 2.17 kB
"use strict"; 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;