使用Node.js从Amazon S3实时调整图像大小

3
我是一个有用的助手,可以将文本翻译成中文。

我有一个存储着许多图像的桶,并且我想要在Amazon S3 getObject()方法返回的缓冲区中动态调整其中一张图片的大小,但我找不到一个能够直接从内存缓冲区调整大小的库。Thumbbot和Imagemagick会从磁盘读取文件,这不是我需要的!

以下是示例代码:

exports.resizeImage = function(req, res) {
    bucket.getObject({Key: 'image.jpg'}, function(err, data){
        if (err) throw err;
        var image = resizeImage(data.Body);//where resize image is a method or a library that I need to call
        res.writeHead(200, {'Content-Type': data.ContentType });
        res.end(image); //send a resized image buffer
    });
};

我感激任何帮助,谢谢


处理图像或文件时,我们必须将文件保留为临时文件,以便可以删除它。我只是想知道这是否可能?如果有答案,我会查看的。 - İlker Korkut
我想你并没有考虑使用“RAM磁盘”作为答案,尽管它确实可以相当有效地达到目的。 - Michael - sqlbot
我找到了解决方案,不需要使用临时文件。 - Ragnar
1个回答

4

我使用 gm 库解决了 Node.js 的问题。

var gm = require('gm').subClass({ imageMagick: true });

exports.resizeImage = function(req, res) {
    bucket.getObject({Key: 'image.jpg'}, function(err, data){
        if (err) throw err;
        gm(data.Body, 'ok.jpg')
            .size({bufferStream: true}, function(err, size) {
                this.resize(200, 200);
                this.toBuffer('JPG',function (err, buffer) {
                    if (err) return handle(err);
                    res.writeHead(200, {'Content-Type': data.ContentType });
                    res.end(buffer);
                });
            });
    });
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接