Могу ли я объединить команды вместе с 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()
,