0

我是 node.js 和 Web 开发的新手,对 node.js 锐利模块有疑问。我想使用 node.js sharp 模块调整图像大小/裁剪图像,将其存储到缓冲区并在之后访问它。在阅读了Sharp API之后,我想出了这个代码示例。

sharp('img.jpg').extract(extract).resize(height, width).toBuffer(function (err, data, info) {img = data;});

我认为变量 img 现在包含我的新图像。我的第一个问题是我的假设是否正确。如果这是正确的,我如何在我的网站上显示新图像?如果可能,我想使用 HTML img 标签。但如果有更好更简单的方法,请随时告诉我。我不想将图像存储到本地文件。

谢谢你的帮助!

4

1 回答 1

0

这是正确的。您首先需要使用 fs 将图像保存在磁盘上 ->

const   saveImageOnDisk = (base64Image, imageName) => 
{
    const   buf = new Buffer(base64Image.replace(/^data:image\/\w+;base64,/, ''), 'base64');

    fs.writeFile(`./${imageName}.png`, buf, {encoding: 'base64', flag: 'w'}, err => console.warn(err));
};

然后,您可以尝试通过使用 Sharp 进行一些操作来访问此图像(例如在节点服务器上显示图像)

exports.getImage = (req, res) =>
{
    const   fileName = `./${req.params.image}`;
    const   width = 200;
    const   height = 200;

    sharp(fileName)
    .resize(height, width)
    .toBuffer()
    .then((data) =>
    {
        //To display the image
        res.writeHead(200, {
            'Content-Type': 'image/png',
            'Content-Length': data.length
        });
        return (res.end(data));
    })
    .catch(err => console.log(err));
};

所以,像这样的路线

app.route('/myImages/:image').get(Methods.getImage);

您可以使用简单的 url -> http://yourserver.xyz/myImages/imageX访问您的图像

于 2018-06-12T07:38:50.453 回答