Python按最大边比例调整图像大小

3 投票
2 回答
3592 浏览
提问于 2025-04-18 16:03

我刚开始学Python,所以这个问题很基础。我有一个以图片为主的网站,正在用Django开发。现在我想调整图片的大小,或者说我想减小图片的尺寸。网站上的图片有不同的尺寸,有些图片是宽度最大,有些是高度最大,我希望在不改变它们形状的情况下调整它们的大小。

下面是一些我网站上图片的尺寸示例。

在这里输入图片描述

在这里输入图片描述

第一张图片的宽度最大,第二张图片的高度最大,而且它们的尺寸都很大,所以需要调整大小,或者说这些图片需要减小尺寸。我使用了PIL库,代码如下。

from PIL import Image,ImageDraw, ImageFont, ImageEnhance

def image_resize(request,image_id):
    photo = Photo.objects.get(pk=image_id)
    img = Image.open(photo.photo.file)
    image = img.resize((1000, 560), Image.ANTIALIAS)
    image.save()

这个函数会把所有图片的宽度调整为1000,高度调整为560。但我不想把所有图片都调整成相同的宽度和高度,而是希望每张图片保持自己的形状,也就是说它们的形状保持不变,但图片的大小会被调整。我该怎么做呢?我对Python还很陌生。

2 个回答

0

我记得之前做过这个,没有遇到什么问题,只是我用了缩略图的方法,而不是调整大小。你可以试试这个方法。你不需要把 img 赋值给 image。你可以直接处理 img,然后保存处理后的结果。

# open img
img.thumbnail((1000,560), Image.ANTIALIAS)
# save img
4

你想让所有的图片宽度都变成1000吗?试试这个代码。它会把图片的宽度调整到最多1000(如果图片本身的宽度已经小于1000,那就不会有任何变化)。

def image_resize(request,image_id):
    photo = Photo.objects.get(pk=image_id)
    image = Image.open(photo.photo.file)
    (w,h) = image.size
    if (w > 1000):
        h = int(h * 1000. / w)
        w = 1000
    image = image.resize((w, h), Image.ANTIALIAS)
    image.save()

撰写回答