Image 什么';这是一种更优雅的裁剪算法?(Python语言)

Image 什么';这是一种更优雅的裁剪算法?(Python语言),image,python-imaging-library,python,crop,Image,Python Imaging Library,Python,Crop,我想在Django应用程序中裁剪一个缩略图,这样我就可以得到一个显示图像中心的二次图像。我同意,这并不难 我已经写了一些代码,正是这样做,但不知怎的,它缺乏一定的。。。优雅。我不想玩代码高尔夫,但我认为一定有一种方式来表达这种更短、更具Python风格的风格 x = y = 200 # intended size image = Image.open(filename) width = image.size[0] height = image.size[1] if (width > hei

我想在Django应用程序中裁剪一个缩略图,这样我就可以得到一个显示图像中心的二次图像。我同意,这并不难

我已经写了一些代码,正是这样做,但不知怎的,它缺乏一定的。。。优雅。我不想玩代码高尔夫,但我认为一定有一种方式来表达这种更短、更具Python风格的风格

x = y = 200 # intended size
image = Image.open(filename)
width = image.size[0]
height = image.size[1]
if (width > height):
    crop_box = ( ((width - height)/2), 0, ((width - height)/2)+height, height )
    image = image.crop(crop_box)
elif (height > width):
    crop_box = ( 0, ((height - width)/2), width, ((height - width)/2)+width )
    image = image.crop(crop_box)
image.thumbnail([x, y], Image.ANTIALIAS)
你有什么想法吗

编辑:解释x,y

PIL模块中的
fit()
函数实现您想要的功能:

width, height = image.size
if width > height:
    crop_box = # something 1
else:
    crop_box = # something 2
image = image.crop(crop_box)
image.thumbnail([x, x], Image.ANTIALIAS)   # explicitly show "square" thumbnail
ImageOps.fit(image, (min(*image.size),) * 2, Image.ANTIALIAS, 0, (.5, .5))

我想这应该可以

size = min(image.Size)

originX = image.Size[0] / 2 - size / 2
originY = image.Size[1] / 2 - size / 2

cropBox = (originX, originY, originX + size, originY + size)

我想对jepg图像进行内容分析。我想要一个jpeg图像,比如251 x 261,然后通过一个算法将其裁剪为96 x 87。这个程序能做到这一点吗,就像t编写一个智能裁剪算法,并提示对图像进行重新分割一样。

Hmm。。这看起来并不能产生正方形的图像。或者我遗漏了什么?fit()函数返回一个新的图像对象,我忘了提到这一点。也许是这样?我喜欢把宽度和高度变量显式命名。否则,阅读此代码的人必须找到Image.sizema的文档可能有Image.Width和Image.Height属性,但我不知道。我只是从问题中推断出密码。