Sunday, May 13, 2007

Python Image Library(PIL)のThumb関数

PloneのImageアイテムでも使用している、サムネイル関数について調べてみた。

Image.py の 1505行目(Ver.1.1.6) def thumbnail(self, size, resample=NEAREST):
にて行っている。

結論からすると、サムネイルを作成する、sizeに与えたタプルにの x, y それぞれより、
サムネイル後の画像が大きくなることはない。また、縦横比が変わることはない。

  • x, yに同じ値を与えると、元画像の長辺が、xの値になる。
  • 元画像に正方形を与えると、x, yの大きい方のサイズの正方形が出来上がる。
  • x:600, y:480 とし、元画像が、1000, 1200 の場合は、400,480となる。

下記に、Image.py内のコードをテストするコードを書いて実験してみた。


>>> def thumb(o_size,n_size):
x, y = o_size
a, b = n_size
if x > a:
y = max(y * a /x, 1)
x = a
if y > b:
x = max(x * b /y, 1)
y = b
print x,y



>>> thumb((1000,1000), (480,480))
480 480
>>> thumb((1000,1000), (600,480))
480 480
>>> thumb((1000,1500), (600,480))
320 480
>>> thumb((1000,1200), (600,480))
400 480
>>> thumb((1000,900), (600,480))
533 480
>>> thumb((1000,900), (320,480))
320 288
>>> thumb((1000,1200), (320,480))
320 384
>>> thumb((300,400), (320,480))
300 400
>>> thumb((350,400), (320,480))
320 365
>>> thumb((420,400), (320,480))
320 304
>>> thumb((300,480), (320,480))
300 480
>>> thumb((300,500), (320,480))
288 480
>>> thumb((300,500), (600,480))
288 480
>>> thumb((520,500), (600,480))
499 480
>>> thumb((1000,999), (600,480))
480 480
>>> thumb((1000,990), (600,480))
484 480
>>>

0 Comments:

Post a Comment

<< Home