42 lines
826 B
JavaScript
42 lines
826 B
JavaScript
|
'use strict';
|
||
|
const execBuffer = require('exec-buffer');
|
||
|
const gifsicle = require('gifsicle');
|
||
|
const isGif = require('is-gif');
|
||
|
|
||
|
module.exports = opts => buf => {
|
||
|
opts = Object.assign({}, opts);
|
||
|
|
||
|
if (!Buffer.isBuffer(buf)) {
|
||
|
return Promise.reject(new TypeError('Expected a buffer'));
|
||
|
}
|
||
|
|
||
|
if (!isGif(buf)) {
|
||
|
return Promise.resolve(buf);
|
||
|
}
|
||
|
|
||
|
const args = ['--no-warnings', '--no-app-extensions'];
|
||
|
|
||
|
if (opts.interlaced) {
|
||
|
args.push('--interlace');
|
||
|
}
|
||
|
|
||
|
if (opts.optimizationLevel) {
|
||
|
args.push(`--optimize=${opts.optimizationLevel}`);
|
||
|
}
|
||
|
|
||
|
if (opts.colors) {
|
||
|
args.push(`--colors=${opts.colors}`);
|
||
|
}
|
||
|
|
||
|
args.push('--output', execBuffer.output, execBuffer.input);
|
||
|
|
||
|
return execBuffer({
|
||
|
input: buf,
|
||
|
bin: gifsicle,
|
||
|
args
|
||
|
}).catch(error => {
|
||
|
error.message = error.stderr || error.message;
|
||
|
throw error;
|
||
|
});
|
||
|
};
|