是的,你可以,但不是在这种情况下。您可以进行一些解决方法调用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()。