1. 程式人生 > >How do I resize an image using PIL and maintain its aspect ratio?

How do I resize an image using PIL and maintain its aspect ratio?

我有一個資料夾,裡的圖檔是 96×96, 我希望在這一個資料夾下的檔案被異動時,會自動產生縮圖(64×64)到其他的資料夾下。

Screenshot 2016-06-30 06.51.12

PIL 是 Python 下最有名的影像處理套件。

這個套件,似乎在升級改版本,把一些比較少人用的屬性或方法在新版本裡拿掉,新版本也加入了更多新的功能。一般人應該都只會使用基本功能,有需要使用進階功能的時候可能要留意 PIL 的版本。

範例1號:縮圖

#!/usr/bin/env python
#encoding=utf-8

from PIL import Image

im = Image.open( “tab_icon_countrys.png” )
print im.size

width = 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 glob

from 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 glob

from 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)