2012-09-13 119 views
3

我正在使用node.js和mongodb在类似Facebook的应用程序上工作。我已经能够成功地将图像文件上传到GridFS,并使用node-mongodb-native驱动程序维基的真棒示例将其恢复。图片的最大使用将以缩略图形式显示,所以我从各种SO帖子了解到,保留大尺寸版本和小尺寸版本是最快的解决方案。Mongodb Gridfs缩小图像大小

所以我的问题是如何创建相同图像的各种大小的副本。一些这样的问题已经在SO上被询问,如MongoDB GridFS store multiple sizes of image or use on the fly resizing但是没有人真正回答如何改变尺寸。

在mongo shell中,我可以在fs.chunks集合中看到原始图像的二进制数据,当然必须有某种方法来操纵这个二进制数据以获得较小尺寸的图像,然后我可以将它保存为单独的GridFS块或其他方式。请帮忙,谢谢。

回答

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. */ 
    }); 
}); 
+0

喜拉姆达,感谢您的快速回复。似乎调整大小工作,但是当我使用file.path +'smaller.png'为GridFS部分它说:TypeError:在Object.fstat不良参数 我说resize工作,因为在我的代码,原始图像的GridFS部分也是在调整大小之后,并且没有发生任何问题file path – user1583920

+0

也许变量被覆盖或者什么的,你应该把'file.path +'-smaller.png'存入一个单独的变量。我不知道你的代码或者GridFS如何处理这个问题,也许你应该用你的代码打开一个不同的问题,询问错误。 – Lanbo