How do I resize an image using PIL and maintain its aspect ratio?
我有一個資料夾,裡的圖檔是 96×96, 我希望在這一個資料夾下的檔案被異動時,會自動產生縮圖(64×64)到其他的資料夾下。
PIL 是 Python 下最有名的影像處理套件。
這個套件,似乎在升級改版本,把一些比較少人用的屬性或方法在新版本裡拿掉,新版本也加入了更多新的功能。一般人應該都只會使用基本功能,有需要使用進階功能的時候可能要留意 PIL 的版本。
範例1號:縮圖
#!/usr/bin/env python
#encoding=utf-8from PIL import Image
im = Image.open( “tab_icon_countrys.png” )
print im.sizewidth = 64
ratio = float(width)/im.size[0]
height = int(im.size[1]*ratio)
nim = im.resize( (width, height), Image.BILINEAR )
print nim.size
nim.save( “resized.png” )
執行結果:
(96, 96)
(64, 64)
說明:
原本圖檔 tab_icon_countrys.png 是 96×96, 等比率縮成 64×64.
列出目前目錄下的 *.png 檔案:
#!/usr/bin/env python
#encoding=utf-8
from
glob import globfrom os.path import splitext
from PIL import Image
imagelist = glob( “*.[pP][nN][gG]” )
for img in imagelist:
im = Image.open(img)
png = splitext(img)[0]+“-thumbnail.png”
#im.save(png)
print png
把 sample 1 + sample 2 結合起來,取得 sample 3號:
#!/usr/bin/env python
#encoding=utf-8
from glob
import globfrom os.path import splitext
from PIL import Image
imagelist = glob( “*.[pP][nN][gG]” )
for img in imagelist:
im = Image.open(img)
filename = splitext(img)[0] + “.png”
print “Filename: “ + filename
width = 96
png_filepath = “../drawable-xxhdpi/” + filename
nim = im.resize( (width, width), Image.BILINEAR )
nim.save(png_filepath)