如何使用“包含”选项调整图像的大小,但保留原始尺寸的纵横比?
Posted
技术标签:
【中文标题】如何使用“包含”选项调整图像的大小,但保留原始尺寸的纵横比?【英文标题】:How to resize an image in sharp with the option 'contain' but preserve the aspect ratio of the original dimensions? 【发布时间】:2020-02-18 20:45:27 【问题描述】:我有一个 1000 x 750 像素的图片。
我使用lovell/sharp来调整它的大小:
await sharp(image)
.resize(
fit: sharp.fit.contain,
width: 800,
height: 800
)
.jpeg( quality: 80 )
.toBuffer()
这会生成一个 800 像素 x 800 像素的新图像,原始图像“包含”在该区域内。
我真正想要的是有一个 800 像素 x 600 像素的最终图像。 IOW,调整图像大小并保持纵横比。
我意识到可以通过仅指定宽度来做到这一点。然而,有一个边界框来包含调整大小的图像是有用的,以避免创建大于特定高度的图像。
我可以在不同的设置下清晰地做到这一点吗?
【问题讨论】:
ermagherd,应该先检查一下文档:github.com/lovell/sharp/blob/master/docs/api-resize.mdsharp.fit.inside 确实如此。是时候再次删除这个问题了。 【参考方案1】:保留width
或height
以便夏普保持比率
调整大小时低于高度将保持其比例;
await sharp(image)
.resize(
fit: sharp.fit.contain,
width: 800
)
.jpeg( quality: 80 )
.toBuffer()
【讨论】:
【参考方案2】:将字符串传递给 fit 属性。
let resizedPhoto
await sharp(photoBuffer)
.resize( width: 1200, height: 900, fit: 'fill' )
.toBuffer()
.then((data) =>
resizedPhoto = data
)
.catch((err) => )
【讨论】:
【参考方案3】:我认为你愿意达到的目标:
await sharp(image)
.resize(800, 800,
fit: 'inside',
)
.jpeg( quality: 80 )
.toBuffer()
【讨论】:
以上是关于如何使用“包含”选项调整图像的大小,但保留原始尺寸的纵横比?的主要内容,如果未能解决你的问题,请参考以下文章