如何使用Node JS调整流中图像的大小?使用ffmpeg或Sharp

时间:2019-12-06 02:03:30

标签: javascript node.js gridfs-stream

我已经使用Mongo网格fs和node js将图像文件存储到mongo数据库中。现在我想调整流中图像的大小

我想实现以下尺寸

320x240px 
900x600px
150x100px

这是我的检索代码


    gfs.findOne({ filename: req.params.filename }, function (err, file) {
        if (file) {
            const readstream = gfs.createReadStream(file.filename);
            readstream.on('data', (chunk) => {

            }).pipe(res)
        }
    });

}```

1 个答案:

答案 0 :(得分:2)

我也遇到过同样的问题,但是还没有找到直接处理图像流的NPM库。一种解决方案是在本地复制文件(如果可能的话),然后使用jimp之类的库进行转换。

以下是调整本地image.png文件大小的完整工作示例:

import fs from "fs";
import jimp from "jimp";
import path from "path";

function resizeImage(fileName) {
    return new Promise(function(resolve, reject) {
        jimp.read(fileName, function(err, image) {
            if (err) {
                reject(err);
            } else {
                let extension = path.parse(fileName).ext;
                let name = path.parse(fileName).name;
                let resizedFileName = name + "_resized" + extension;
                image.resize(320, 240)
                    .write(resizedFileName);
                resolve(resizedFileName);
            }
        });
    });
}

(async function() {
    let fileName = "image.png";
    let newFileName = await resizeImage(fileName);
    console.log(newFileName + " generated");
})();

其他工作将是在启动转换之前将流复制到文件(并最终删除复制/生成的本地文件)。

希望有帮助。