如何使用sharp.js将图像从缓冲区存储到node.js中的文件系统

Posted

技术标签:

【中文标题】如何使用sharp.js将图像从缓冲区存储到node.js中的文件系统【英文标题】:how to store image from buffer to file system in node.js using sharp.js 【发布时间】:2018-11-30 02:21:05 【问题描述】:

我在 node.js 中使用 sharp.js 进行图像处理

我的代码

sharp(path)
        .toFormat('jpeg')
        .toBuffer((err, data, info) => 
            fs.writeFile(temp, buffer,  flag: 'w' , function() 
                response.sendFile(temp);
            );
        );

这里的 fs 中的 temp 表示“路径”var temp= imageDir + request.params.id; (http://localhost:2000/images/we.png)

    将图片上传为 png 格式或任何其他格式

    使用.toFormat('jpeg')将该图像转换为JPEG并发送到 缓冲区

    想要将该图像从缓冲区保存到

【问题讨论】:

nodejs.org/api/… 这个问题是否完整?好像少了一些东西 @Geuis 尝试过,但格式正在改变。, 您需要提供示例代码来演示您的问题。 @RobertMennell 是的,罗伯特,问题是完整的。,我转换了文件但无法保存它们,你能建议一种方法吗? 【参考方案1】:

你可以这样做

sharp(req.files[0].path).resize(400, 200).toFile('uploads/' + 'thumbnail-' + req.files[0].originalname, (err, sharp) => 
            if (err) 
                console.error(err);
            
            else 
                console.log(sharp);
            
        );

【讨论】:

【参考方案2】:

您的代码没有“缓冲区”。你应该在写数据。

.toBuffer((err, data, info) => 
        fs.writeFile(temp, data,  flag: 'w' , function() 
            response.sendFile(temp);
        );
    );

但你最好使用 toFile 而不是 toBuffer:

sharp('originalFile.jpg').
        resize(330,null).
        flatten().
        toFile('newFile.jpg', function(err)
            if(err)
                response.sendStatus(500);
                return;
            
            response.sendFile('newFile.jpg');
        );

【讨论】:

谢谢,但是如果我上传 jpg 并转换为 png 怎么办? .. 文件格式是我们想要的 ., 然后操作 newFile.jpg 以获得正确的扩展名。如果您的变量temp 已经在其扩展名中反映了所需的文件类型,那么只需使用它。否则修复它。 好吧,如果我想将扩展名为 .webp 的图像处理为 tiff .,好吧,文件名不应更改为原始名称 .,如果我可以怎么办? 文件名是动态的,根据查询参数,toFile 是动态的

以上是关于如何使用sharp.js将图像从缓冲区存储到node.js中的文件系统的主要内容,如果未能解决你的问题,请参考以下文章

如何显示缓冲图像

sharp.js中文文档

如何使用 pinvoke 将二进制数据缓冲区从 C 传递到 C#

C ++ - 将多个图像放在数组指针中

如何将数据从资源指针存储到 C++ 中的静态内存缓冲区?

使用edsdk 2.8拍照并直接将图像保存到PC