我有一个 Web 服务,它接受一个表示图像的 base 64 编码字符串,使用 imagemagick 库创建该图像的缩略图,然后将它们都存储在 mongodb 中。我正在使用以下代码(大约)执行此操作:
var buf = new Buffer(req.body.data, "base64"); //original image
im.resize({ srcData: buf, width: 256 }, function(err, stdout, stderr) {
this.thumbnail = new Buffer(stdout, "binary");
//store buf and stdout in mongo
});
您会注意到我正在使用“二进制”编码创建一个 Buffer 对象,文档说不要这样做:
'binary' - 一种仅使用每个字符的前 8 位将原始二进制数据编码为字符串的方法。这种编码方法已被弃用,应尽可能避免使用 Buffer 对象。此编码将在 Node.js 的未来版本中删除。
首先,我不确定他们在说什么。我正在尝试创建一个 Buffer 对象,他们似乎暗示我应该已经有了一个。
其次,问题的根源似乎是 imagemagick resize 方法返回了一个包含二进制数据的字符串。执行 typedef(stdout) return "string" 并将其打印到屏幕上肯定会显示一堆非字符数据。
那么我在这里做什么呢?我无法改变 imagemagick 的工作方式。还有另一种方法可以做我想做的事情吗?