這篇文章會介紹使用 Python 的 glob 標準函式庫,搭配 Pillow 第三方函式庫,實作可以將大量的圖片,進行批次調整尺寸的功能。
原文參考:批次調整圖片尺寸
- 本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
- 使用 Colab 操作需要連動 Google 雲端硬碟,請參考:連動 Google Drive
輸入下列指令安裝 Pillow,根據個人環境使用 pip 或 pip3,如果使用 Colab 或 Anaconda Jupyter,已經內建 Pillow 函式庫。
!pip install Pillow
透過 Pillow Image 裡的 size 方法,讀取圖片的長寬尺寸,取得的尺寸為 tuple 型別,尺寸的第一個數值為寬度,第二個數值為高度。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('oxxostudio.jpg') # 開啟圖片
print(img.size) # (1280,720) 印出長寬尺寸
使用 glob 標準函式庫讀取 demo 資料夾裡所有的 jpg 檔案,取得檔案路徑後,就能讀取每一張圖片的長寬尺寸。
相關教學參考:重複迴圈 ( for、while )、查找匹配檔案 glob
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg') # 取得 demo 資料夾內所有的圖片
for i in imgs:
im = Image.open(i) # 依序開啟每一張圖片
size = im.size # 取得圖片尺寸
print(size)
接著使用 Image 的 resize 方法,提供 tuple 型別的長寬數值,就能調整圖片的尺寸。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from PIL import Image
img = Image.open('oxxostudio.jpg') # 開啟圖片
img2 = img.resize((200,200)) # 調整圖片尺寸為 200x200
img2.save('test.jpg') # 調整後存檔到 resize 資料夾
搭配 glob,就能一次將所有圖片的尺寸調整為 200x200。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg')
for i in imgs:
im = Image.open(i)
size = im.size
name = i.split('/')[::-1][0] # 取得圖片的名稱
im2 = im.resize((200, 200)) # 調整圖片尺寸為 200x200
im2.save(f'./oxxo/resize/{name}') # 調整後存檔到 resize 資料夾
雖然上方的程式已經可以調整圖片尺寸,但每一張圖片經過調整都變成了單一 200x200 的正方形尺寸 ( 會出現壓扁或拉長現象 ),如果要讓每張圖片等比例縮放,可以先行計算長寬的比例,再根據比例進行調整,執行後就會按照等比例縮放圖片。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import glob
from PIL import Image
imgs = glob.glob('./oxxo/*.jpg')
for i in imgs:
im = Image.open(i)
size = im.size
max = 400 # 設定長或寬最大的數值
if size[0]>size[1]: # 如果原始圖片 width 大於 height
scale = size[1]/size[0] # 設定 scale 為 height/width
w = max # 設定調整後的寬度為最大的數值
h = int(max*scale) # 設定調整後的高度為 max 乘以 scale ( 使用 int 去除小數點 )
else: # 如果原始圖片 width 小於等於 height
scale = size[0]/size[1] # 設定 scale 為 width/height
w = int(max*scale) # 設定調整後的寬度為 max 乘以 scale ( 使用 int 去除小數點 )
h = max # 設定調整後的高度為最大的數值
name = i.split('/')[::-1][0]
im2 = im.resize((w, h)) # 調整尺寸
im2.save(f'./oxxo/resize/{name}')
透過批次調整圖片尺寸的方式,就能輕鬆建立許多大張圖片的縮圖,節省開啟影像處理軟體調整的時間。
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^