我有一个 Web 服务,它接受一个表示图像的 Base64 编码字符串,使用 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
});
您会注意到,我正在使用“binary”编码创建一个缓冲区对象,而文档中说不要这样做:
首先,我不确定他们在说什么。我正在尝试创建一个缓冲区对象,他们似乎暗示我应该已经有一个。'binary' - 一种将原始二进制数据编码为字符串的方法,只使用每个字符的前8位。这种编码方法已被弃用,应尽可能避免使用,而应使用Buffer对象。此编码将在Node的未来版本中被删除。
其次,问题的根源似乎是imagemagick调整大小方法返回包含二进制数据的字符串。typedef(stdout)返回“string”,将其打印到屏幕上似乎显示了一堆非字符数据。
那么我该怎么办呢?我不能改变imagemagick的工作方式。是否有另一种方法可以实现我想做的事情?