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

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】:

保留widthheight 以便夏普保持比率

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

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()

【讨论】:

以上是关于如何使用“包含”选项调整图像的大小,但保留原始尺寸的纵横比?的主要内容,如果未能解决你的问题,请参考以下文章

将图像重新调整为新的高度和宽度,但不要超过原始高度和宽度

如何使用 iOS 轻松调整/优化图像大小?

Ruby on Rails 中的基本图像大小调整

使用 php Imagick 保留背景调整 PNG 的大小

jQuery文件上传调整大小上传的图像

如何调整图像分割蒙版的大小?