4

我正在使用 node.js 和 mongodb 开发类似 facebook 的应用程序。我已经能够成功地将图像文件上传到 GridFS 并使用 node-mongodb-native 驱动程序 wiki 的精彩示例检索它们。图像的最大使用将作为缩略图,所以我从各种 SO 帖子中了解到,同时保留大尺寸版本和小尺寸版本将是最快的解决方案。

所以我的问题是如何创建同一图像的各种大小的副本。诸如MongoDB GridFS 存储多种大小的图像或使用动态调整大小的SO 上已经提出了许多此类问题,但没有一个真正回答如何更改大小。

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

4

1 回答 1

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. */
    });
});
于 2012-09-13T21:04:06.500 回答