Javascript 使用云功能在云存储上转换图像格式,Sharp不起作用
将图像上载到Firebase云存储时,我希望调整图像大小并将图像格式转换为webp。所以我用云函数创建了一个触发器。为此,我使用Node.js Sharp库 云函数可以正确调整图像大小,但它始终保持原始格式。 这是转换和调整大小的代码:Javascript 使用云功能在云存储上转换图像格式,Sharp不起作用,javascript,node.js,firebase,google-cloud-functions,sharp,Javascript,Node.js,Firebase,Google Cloud Functions,Sharp,将图像上载到Firebase云存储时,我希望调整图像大小并将图像格式转换为webp。所以我用云函数创建了一个触发器。为此,我使用Node.js Sharp库 云函数可以正确调整图像大小,但它始终保持原始格式。 这是转换和调整大小的代码: 函数调整大小(原始文件、调整大小文件、大小){ 让高度、宽度; if(size.indexOf(“,”)!=-1){ [宽度,高度]=大小。拆分(“,”); }else if(size.indexOf(“x”)!=-1){ [宽度、高度]=尺寸。分割(“x”)
函数调整大小(原始文件、调整大小文件、大小){
让高度、宽度;
if(size.indexOf(“,”)!=-1){
[宽度,高度]=大小。拆分(“,”);
}else if(size.indexOf(“x”)!=-1){
[宽度、高度]=尺寸。分割(“x”);
}否则{
抛出新错误(“高度和宽度不由“,”或“x”分隔);
}
返回夏普(原始文件)
.轮换
.toFormat(“webp”{
质量:80,
原力:对
})
.调整大小(parseInt(宽度,10),parseInt(高度,10){
适合:“内部”,
不扩大:是的,
}).toFile(resizedFile);
}
不要只使用toFormat()
尝试使用它,然后是webp()
调用,如下所示:
return sharp(originalFile)
.rotate()
.resize(parseInt(width, 10), parseInt(height, 10), {
fit: "inside",
withoutEnlargement: true,
})
.toFormat("webp")
.webp({
quality: 80,
force: true
});
.toFile(resizedFile);
这应该可以让它工作。不要只使用
toFormat()
尝试使用它,然后调用webp()
,如下所示:
return sharp(originalFile)
.rotate()
.resize(parseInt(width, 10), parseInt(height, 10), {
fit: "inside",
withoutEnlargement: true,
})
.toFormat("webp")
.webp({
quality: 80,
force: true
});
.toFile(resizedFile);
这应该能让它起作用。我已经为此奋斗了几个小时,这就是最终对我起作用的原因。确保使用上载头设置的用于上载到AWS/Azure/Digital Ocean的mimetype为“image/webp”我已经为此奋斗了数小时,这是我最终成功的方法。确保使用上载头设置的用于上载到AWS/Azure/Digital Ocean的mimetype为“image/webp”我已经尝试过,我再次尝试过,但它不起作用。我认为问题可能是“webp”,但对于其他格式它也不起作用。你如何调用该函数
.toFile(resizedFile)
返回一个承诺,因此这可能是一个同步性问题。同步调用该函数(使用表达式“await”)。事实上,调整大小功能工作正常。这可能是与导入sharp library有关的问题吗?或者是操作系统问题?我想说,你在代码中做的每件事都是正确的,问题很可能出在sharp库本身,尝试使用它的不同版本作为测试。我尝试过更新和旧版本,但不幸的是,它不起作用。我已经尝试过,我再次尝试过,但它不起作用。我认为问题可能是“webp”,但对于其他格式它也不起作用。你如何调用该函数.toFile(resizedFile)
返回一个承诺,因此这可能是一个同步性问题。同步调用该函数(使用表达式“await”)。事实上,调整大小功能工作正常。这可能是与导入sharp library有关的问题吗?或者是操作系统问题?我想说你在代码中做的每件事都是正确的,问题很可能出在sharp库本身,试着使用它的不同版本作为测试。我试过更新和旧版本,但不幸的是,它不起作用。这看起来更像是一个评论而不是答案。这看起来更像是一个评论而不是答案。