节点流 - 如何读取文件流的数据



我正在尝试压缩图像,将其转换为dataURI,并将其保存到文本文件中

我正在使用GraphicsMagic来读取和压缩图像。

我想将图像中的数据"管道"到流中,并将该图像数据转换为dataURI,这样我就可以避免创建中间图像。

var file = '/path/to/file.png'
gm(file).compress('JPEG').quality(20).stream(function (err, stdout, stderr) {
   stdout.pipe(streamChunkReader);
});

现在,在streamChunkReader中,我会将图像数据转换为dataURI,例如:

content = dataURI.format('.png', dataChunk);
console.log(content); //"data:image/png;base64,eGtjZA=="

尽管如此,我不确定streamChunkReader能够获得图像数据会是什么样子

看了streamChunkReader上调用的方法后,我想它是这样的:

var streamChunkReader = {
    write: function (imageData) {
        console.log(imageData); // the image data
        // so I could do
        console.log(dataURI.format('.png', imageData);) //"data:image/png;base64,eGtjZA=="
    }
}

但当我记录imageData时,它是<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff fe 00 0f 4...,我不确定那是什么。

这里有几个问题。为了回答您关于<Buffer ff d8 ff...是什么的问题,它是一个包含二进制数据的Buffer对象。当你把这些转储到控制台时,你会看到它的十六进制表示

您没有告诉我们dataURI使用了什么,但通过查看您的示例,至少.format函数似乎不支持流。如果你想使用它,你需要得到一个包含整个文件的缓冲区。您可以使用fs.readFile()

如果是我,我会使用Base64编码的TransformStream。我还没用过这个,但看看吧:https://www.npmjs.org/package/base64-stream此外,请查看Sharp NPM软件包。它在后台使用libvips,速度可能比GraphicsMagick快得多。安装过程不是最简单的(至少在CentOS上),但它是值得的。

相关内容

  • 没有找到相关文章