40 lines
749 B
JavaScript
40 lines
749 B
JavaScript
'use strict';
|
|
const execBuffer = require('exec-buffer');
|
|
const isJpg = require('is-jpg');
|
|
const jpegtran = require('jpegtran-bin');
|
|
|
|
module.exports = opts => buf => {
|
|
opts = Object.assign({}, opts);
|
|
|
|
if (!Buffer.isBuffer(buf)) {
|
|
return Promise.reject(new TypeError('Expected a buffer'));
|
|
}
|
|
|
|
if (!isJpg(buf)) {
|
|
return Promise.resolve(buf);
|
|
}
|
|
|
|
const args = ['-copy', 'none'];
|
|
|
|
if (opts.progressive) {
|
|
args.push('-progressive');
|
|
}
|
|
|
|
if (opts.arithmetic) {
|
|
args.push('-arithmetic');
|
|
} else {
|
|
args.push('-optimize');
|
|
}
|
|
|
|
args.push('-outfile', execBuffer.output, execBuffer.input);
|
|
|
|
return execBuffer({
|
|
input: buf,
|
|
bin: jpegtran,
|
|
args
|
|
}).catch(error => {
|
|
error.message = error.stderr || error.message;
|
|
throw error;
|
|
});
|
|
};
|