如何用Sharp库按图片长边缩放并保持宽高比?
用Sharp实现按长边限制、保持宽高比的图片缩放
完全可以实现你要的功能,不需要提前读取图片宽高或EXIF数据。你的代码问题出在fit选项的位置不对——它应该作为resize()方法的参数,而不是sharp构造函数的配置项。
Sharp的fit: 'inside'行为正好匹配你的需求:它会严格保持图片原有宽高比,将图片缩放到不超过指定的宽高限制范围,最终效果就是长边被限制在你设定的像素值,短边按比例自动计算。
修正后的代码如下:
配置部分(可保留你的原有结构)
exports.resizeResolutions = { mapThumbnail: { maxEdge: 300 }, // 统一设定长边的最大限制值 } exports.fitMethods = { inside: "inside", }
图片处理逻辑
const maxEdge = resizeResolutions.mapThumbnail.maxEdge; proc = sharp(path.join(pathToLocalFSGalleries, folder, file)) .resize(maxEdge, maxEdge, { fit: fitMethods.inside }); await proc.toFile(path.join(pathToThumbnails, folder, file));
也可以用更简洁的对象参数写法:
proc = sharp(path.join(pathToLocalFSGalleries, folder, file)) .resize({ width: 300, height: 300, fit: 'inside' });
这样处理后会得到你想要的效果:
- 3:2比例的横图会生成300×200的图片
- 2:3比例的竖图会生成200×300的图片
- 所有图片都会保持原有宽高比,且长边不会超过300px
内容的提问来源于stack exchange,提问作者icor103
相关产品推荐
相关产品推荐

