是的,你可以,但不是在这种情况下。您可以进行一些解决方法调用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
无法提供足够好的抽象来隐藏它。除非您知道 GraphicsMagick选项的语法,否则您经常被迫使用.resize(240, 240, '!')
没有意义的结构。-resize
那是因为当您调用gm
's 方法时,它只是将选项附加到某些 GraphicsMagick 命令,当您执行方法时将调用该命令,.write()
这是这种方法失败的情况之一。GraphicsMagick 提供了一些支持不同选项的命令。最常用的命令是convert
,它支持例如方法-draw
使用的选项.drawText()
。另一个命令composite
用于将图像合并在一起 - 它不支持-draw
选项。当您使用.composite()
方法时gm
使用composite
命令,因此.drawText()
方法开始失败。因此,您可以链接类似.drawText()
and的方法.resize()
,但不能链接.drawText()
and .composite()
。