4

Django アプリケーションでサムネイル画像をトリミングして、画像の中心を示す二次画像を取得したいと考えています。これはそれほど難しいことではありません。同意します。

私はすでにこれを正確に行うコードをいくつか書いていますが、どういうわけか特定の...優雅さが欠けています。私はコードゴルフをしたくはありませんが、これをより短く、より Pythonic に表現する方法があるに違いないと思います。

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について説明しました

4

4 に答える 4

9

私はこれがすべきだと思います。

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)
于 2009-04-02T12:06:23.230 に答える
6

fit()PIL ImageOpsモジュールの関数は、必要なことを実行します。

ImageOps.fit(image, (min(*image.size),) * 2, Image.ANTIALIAS, 0, (.5, .5))
于 2009-04-02T12:05:43.200 に答える
1
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
于 2009-04-02T11:56:26.827 に答える
0

jepg画像のコンテンツ解析をしたいです。251 x 261 と言う jpeg imafe を取り、それをアルゴリズムに渡して 96 x 87 と言うようにトリミングしたいと考えています。

于 2009-08-24T01:14:21.357 に答える