如何使用选项“包含”调整图像大小但保留原始尺寸的纵横比?

use*_*947 7 javascript node.js sharp

我有一个 1000 像素 x 750 像素的图像。

我使用 lovell/sharp 来调整它的大小:

await sharp(image)
    .resize({
        fit: sharp.fit.contain,
        width: 800,
        height: 800
    })
    .jpeg({ quality: 80 })
    .toBuffer()
Run Code Online (Sandbox Code Playgroud)

这会生成一个 800 像素 x 800 像素的新图像,原始图像“包含”在该区域内。

我真正想要的是有一个 800 像素 x 600 像素的最终图像。IOW,调整图像大小并保持纵横比。

我意识到可以通过仅指定宽度来做到这一点。然而,有一个边界框来包含调整大小的图像是有用的,以避免创建大于特定高度的图像。

我可以在不同的设置下清晰地做到这一点吗?

Ces*_*las 23

What I think you are willing to achieve:

await sharp(image)
    .resize(800, 800, {
        fit: 'inside',
    })
    .jpeg({ quality: 80 })
    .toBuffer()
Run Code Online (Sandbox Code Playgroud)


map*_*ith 5

保持widthheight保持夏普将保持比率

调整大小时,低于高度将保持其比例;

await sharp(image)
    .resize({
        fit: sharp.fit.contain,
        width: 800
    })
    .jpeg({ quality: 80 })
    .toBuffer()
Run Code Online (Sandbox Code Playgroud)