枕头调整图像大小 - 保持纵横比

Posted

技术标签:

【中文标题】枕头调整图像大小 - 保持纵横比【英文标题】:Pillow Resize Image - Maintaing Aspect Ratio 【发布时间】:2020-08-12 08:41:30 【问题描述】:

我有以下示例,我希望使用 Pillow 调整图像大小。

如您所见,我有一个新的宽度由用户传入,但没有高度。在保持相同纵横比的同时,如何计算出这张图片的新高度?

图像不是正方形,它们是矩形,因此高度和宽度不会相同。

    orig_image = Image.open(get_full_path(file.relative_path))
    new_width = int(request.args.get('w'))

    # TODO resize properly, we need to work out new image height
    resized_image = orig_image.resize((new_width, ), Image.ANTIALIAS)

【问题讨论】:

这能回答你的问题吗? Does Python PIL resize maintain the aspect ratio? @Dmitry 这没有回答我的问题。我需要根据传入的新宽度变量计算出新高度,并保持与以前相同的纵横比。我的图像不是正方形,所以新的高度和宽度不会相同 【参考方案1】:

听起来您想从原始图像中获取原始纵横比,如下所示:

aspect_ratio = orgin_image.width / orgin_image.height

收到new_width 后,您可以像这样计算new_height

new_height = new_width * aspect_ratio

然后就可以正确调整图片大小了:

resized_image = orig_image.resize((new_width, new_height), Image.ANTIALIAS)

或者把它们放在一起:

orig_image = Image.open(get_full_path(file.relative_path))
aspect_ratio = orgin_image.width / organ_image.height

new_width = int(request.args.get('w'))
new_height = new_width * aspect_ratio

resized_image = orig_image.resize((new_width, new_height), Image.ANTIALIAS)

【讨论】:

所以我确实尝试过这样的事情,但这通常会导致图像宽度小于图像高度。由于这些图像是矩形,这意味着您会得到一个非常拉伸且模糊的图像。 你能分享这段代码吗?这不应该发生,因为您在这里尊重宽度和高度之间的原始关系。

以上是关于枕头调整图像大小 - 保持纵横比的主要内容,如果未能解决你的问题,请参考以下文章

在 CSS FlexBox 布局中自动调整图像大小并保持纵横比?

如何按比例调整图像大小/保持纵横比?

使用“Vstack”将图像大小调整为屏幕宽度,同时保持纵横比

c# 在保持纵横比的同时将图像调整为不同的大小

在不保持纵横比的情况下使用 mogrify 调整图像大小

调整图像大小以保持纵横比