我正在努力使用 node 和 express 以优化配置渲染图像。
我设法使用 Jimp 创建了一个上传方法,该方法可以转换大于 2000px 宽和大于 2mb 文件大小的图像,并且效果很好,我遇到了许多执行相同操作的库 Jimp 对于我构建的内容在内存中的效率更高。
基本上我在我的液体模板引擎中有这样的:
<img src="{{i.images[0].path}}" alt="{{i.name}}">
我想创建一个路由器,它使用 images 数组从 MongoDB /projects/project 路由中读取图像,并将图像传递回渲染器,按照配置中的指示优化和调整大小,我想进一步配置此方法可能是一个中间件,可以在站点中全局使用带有查询参数的图像,以便按需渲染,还可以通过设备检测来增强下载性能:
const request = require('request');
const fs = require("fs");
const path = require("path");
const sharp = require('sharp');
module.exports = (req, res, next) => {
request(process.env.REQUEST_PATH + "/projects?projectType=Refurbishment%20and%20Extensions", (err, response, body) => {
if (err) {
console.log(err);
} else {
const contentData = JSON.parse(body);
contentData.projects.forEach((value, key) => {
if (value.images[0].path.length > 0) {
const readStream = fs.createReadStream(path.resolve("./" + value.images[0].path));
//const getBuffer = Buffer.from(path.resolve("./" + value.images[0].path));
const trasnform = sharp(readStream).resize(200, 200, {
fit: "contain"
}).jpeg({
quality: 20
}).toBuffer((err, data, info) => {
if (err) {
console.log(err)
} else {
console.log("BUFFERED RESIZED", info);
//console.log("BUFFER", data);
}
});
console.log(trasnform); //nothing working
readStream.pipe(trasnform).pipe(res);
}
});
const data = {
name: "Refurbishment and Extensions Projects",
content: contentData
};
res.render('./refurbishment-and-extensions-projects', {
page: data
});
}
});
}
在某些尝试中,它从 Sharp 返回信息并将图像转换为缓冲区,我不知道为什么,但现在我收到错误 [错误:输入文件丢失] 但有一个缓冲区要读取!
目前我对解决方案并不挑剔,但关于一些性能测试,sharp.js 或 canvas.js 会很好用,请给我一些想法。