2012-09-13 116 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