我正在尝试压缩图像,将其转换为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上),但它是值得的。