Вы можете проверить исходный код node-imagemagik: Ссылка на код .
node-imagemagik - это оболочка для инструмента convert
.
Функция преобразования определяется следующим образом
exports.convert = function(args, timeout, callback) {
var procopt = {encoding: 'binary'};
if (typeof timeout === 'function') {
callback = timeout;
timeout = 0;
} else if (typeof timeout !== 'number') {
timeout = 0;
}
if (timeout && (timeout = parseInt(timeout)) > 0 && !isNaN(timeout))
procopt.timeout = timeout;
return exec2(exports.convert.path, args, procopt, callback);
}
exports.convert.path = 'convert';
Предполагается, что вы даете те же аргументы, что и в командной строке, то есть путь к исходному изображению. Тем не менее, convert
поддерживает ввод из stdin, и именно так вы можете передать свои данные PDF в процесс.
В исходном коде есть полезный пример. Определение функции изменения размера, которая принимает двоичные данные и передает их в функцию преобразования с соответствующими параметрами.
var resizeCall = function(t, callback) {
var proc = exports.convert(t.args, t.opt.timeout, callback);
if (t.opt.srcPath.match(/-$/)) {
if ('string' === typeof t.opt.srcData) {
proc.stdin.setEncoding('binary');
proc.stdin.write(t.opt.srcData, 'binary');
proc.stdin.end();
} else {
proc.stdin.end(t.opt.srcData);
}
}
return proc;
}
exports.resize = function(options, callback) {
var t = exports.resizeArgs(options);
return resizeCall(t, callback)
}
Вызов convert
сделан с заменой имени входного файла на «-». Использование эквивалента из терминала будет выглядеть примерно так:
my_process_that_outputs_pdf | convert - <convertion options here...> my_output.png