如何使用 toBuffer 使用 [node] graphicsmagick 创建新图像

How do I create a new image with [node] graphicsmagick using toBuffer

我正在尝试创建一个新图像,该图像最终将通过 gridfs 插入到 mongo 数据库中。我宁愿避免向文件系统写入任何内容,所以最好的方法似乎 create a new image, write the result to a buffer, then insert the buffer into the database. Unfortunately, the toBuffer method 不适用于新图像:

var gm = require( 'gm' );
gm(200, 200, '#000F')
    .setFormat('png')
    .fill('black')
    .drawCircle( 50, 50, 60, 60 )
    .toBuffer( 'PNG', function( error, buffer )
    {
        if( error ) { console.log( error ); return; }
        console.log( 'success: ' + buffer.length );
    }
);

...产生以下错误:

[Error: Stream yields empty buffer]

看起来 gm 只是不喜欢你给 toBuffer'PNG' 论点。我认为它也没有必要,因为您之前已经将格式指定为 png 。尝试简单地删除它:

var gm = require( 'gm' );
gm(200, 200, '#000F')
    .setFormat('png')
    .fill('black')
    .drawCircle( 50, 50, 60, 60 )
    .toBuffer(function( error, buffer )
    {
        if( error ) { console.log( error ); return; }
        console.log( 'success: ' + buffer.length );
    }
);