我正在使用node.js和mongodb在facebook上工作。我已经能够成功地将图像文件上传到GridFS,并使用node-mongodb-native驱动程序wiki的很棒的示例来检索它们。图像的最大使用将是缩略图,因此我从各种SO帖子中了解到,保持大尺寸版本和小尺寸版本将是最快的解决方案。
所以我的问题是如何创建同一图像的各种大小的副本。关于SO MongoDB GridFS store multiple sizes of image or use on the fly resizing已经提出了许多这样的问题但是没有人真正回答如何改变大小。
在mongo shell中,我可以在fs.chunks集合中看到原始图像的二进制数据,当然必须有一些方法来操作这个二进制数据来获得更小的图像然后我可以另外保存GridFS块或其他一些方式。请帮助,谢谢。
答案 0 :(得分:1)
要缩小图像的大小,必须先将其缩放,然后再将其保存到GridFS。 GridFS与缩放图像的过程无关。
但是,如果我没记错的话,你可以制作GridFS二进制数据的数据流。 node-gd是一个用于缩放图像的库(以及其他内容),据我所知,它可以处理流。
如果您可以直接使用上传的文件(在将它们保存到GridFS之前),node-imagemagick提供了一个非常简单的调整大小功能:
/* with express */
app.post('/image', function(req, res) {
file = req.files[0];
(require 'imagemagick')
.resize({
srcPath: file.path,
dstPath: file.path + '-smaller.png',
width: 50}, function(err, stdout, stderr) {
/* You now have two files: file.path is the original, file.path + '-smaller.png' is the thumbnail. */
});
});