You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:20:32