【问题标题】:Python Resize image with ratio of maximum side of the imagePython使用图像最大边的比例调整图像大小
【发布时间】:2014-08-05 11:11:21
【问题描述】:

我是 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 的图像。但我不想调整所有具有相同宽度和高度的图像的大小,而是我想调整每个图像的大小,保持自己的 形状。那就是 shape 将是相同的,但图像将被调整大小。我该怎么做?我真的是 python 新手。

【问题讨论】:

  • 1. Get the size of the image; 2.计算新尺寸,保持相同的高/宽比例; 3. 调整到新大小。到目前为止,您甚至还没有尝试过第 1 步和第 2 步。
  • 一个非常相似的问题在这里详细回答:stackoverflow.com/questions/273946/…
  • 我想调整图像的大小,保持最大边。也就是说,如果最大边是图像的宽度,那么宽度将不变,高度将调整大小,反之亦然。是否可以?
  • 是的,当然可以,但这不是代码编写服务。但是,我认为这没有任何意义 - 您希望保持宽度和高度之间的 ratio 以避免“挤压”图像,并且必须减小高度、宽度或两者以修复你的最大值。保持一个固定而改变另一个会扭曲图像。

标签: python django image python-imaging-library


【解决方案1】:

你想让所有图片的宽度都为 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()

【讨论】:

    【解决方案2】:

    我记得以前做过这个没有任何问题,除了我使用缩略图方法而不是调整大小。尝试一下。您无需将 img 分配给图像。您可以处理 img 并保存。

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

    【讨论】:

    • 这个答案没用
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多