Могу ли я объединить команды вместе с gm для node.js?

Могу ли я соединить две или более команды вместе при использовании gmбиблиотека GraphicsMagick для узла?

В частности, у меня есть изображение, к которому я хотел бы добавить текст, а затем нанести на него водяной знак, но все, что я пытаюсь сделать, похоже, не работает.

Я пытался использовать gm(image).drawText(0,0,"Text").composite(logo) ... но это говорит мне Unrecognized option (-draw), Аналогичная вещь, когда я сначала создаю, а затем рисую текст.

Я также попытался написать файл, а затем добавить .drawText позвонить до конца, но это не сработало.

Так можно ли связать две или более команд вместе?

2 ответа

Ты можешь использовать toBuffer и перейти к следующему gm вызов (этот конкретный код не тестировался, но я использовал аналогичную технику AWS Lambda).

gm(image)
  .drawText(0, 0, 'Text')
  .toBuffer('PNG',function (err, buffer) {
    if (err) return handle(err);
    gm(buffer)
      .composite(logo)
      .write('./output.png', e => console.log(e || 'OK'));
    console.log('done!');})

Да, можно, но не в этой ситуации. Вы можете сделать обходной вызов gm дважды и передаем результат первого звонка другому:

const stream = require('stream');
const passThrough = new stream.PassThrough();

gm(image).drawText(0, 0, 'Text').stream().pipe(passThrough);
gm(passThrough).composite(logo).write('./output.png', e => console.log(e || 'OK'));

Если честно gm Библиотека отстой. Если вы ничего не знаете о GraphicsMagick, gm не в состоянии обеспечить достаточно хорошую абстракцию, чтобы скрыть это. Вы постоянно вынуждены использовать такие конструкции, как .resize(240, 240, '!') которые не имеют смысла, если вы не знаете синтаксис GraphicsMagick's -resize вариант. Это потому, что когда вы звоните gmМетод просто добавляет опцию к некоторой команде GraphicsMagick, которая будет вызываться при выполнении .write() метод, и это одна из таких ситуаций, когда этот подход не удается. GraphicsMagick предоставляет несколько команд, которые поддерживают различные параметры. Наиболее часто используемая команда convertподдерживает, например -draw вариант, который используется .drawText() метод. Другая команда composite который используется для объединения изображений вместе - он не поддерживает -draw вариант. Когда вы используете .composite() метод gm использования composite командовать так .drawText() методы начинают терпеть неудачу. Таким образом, вы можете связать методы, такие как .drawText() а также .resize(), но нет .drawText() а также .composite(),

Другие вопросы по тегам