Last Updated on 2021-04-13 by Clay
今天在進行自己的 Side Project 時遇到了需要大量剪切圖片的情況。所幸,那些圖片幾乎都是 1920 x 1080 的尺寸,所以我可以比較固定地剪取特定的區域。
隨著進行的影像處理的工作越來越多,越來越喜歡 Pillow。有空我想要寫一篇詳細點的筆記,今天只紀錄該如何剪取圖片。
Pillow
Pilliow 是一個 Python 可以調用的『影像處理』的套件。若是要第一次使用,要用以下指令安裝:
pip3 install Pillow
安裝好之後,我們就可以用 Python 來呼叫 Pillow 啦。
假設我一張以下這樣的圖片:
然後我的目標,是要將中央的怪物圖示擷取出來,另存成為一張新的圖片。
首先,我推薦打開小畫家查看『要擷取範圍』的 (x, y) 座標。當然,如果你有其他方法可以查看座標,那當然是很好的。
左下角會顯示滑鼠位置的座標,這樣我們就可以查看想要擷取範圍的座標了。
就像這樣。
那麼,以下是一段 sample code:
# -*- coding: utf-8 -*- import os import re from PIL import Image picList = os.listdir('pic') for pic in picList: if '01.png' not in pic: continue image = Image.open('pic/{}'.format(pic)) # Crop newImage = image.crop((780, 310, 1080, 610)) newImage.show() exit()
首先,我們要使用 from PIL import Image
來匯入 Pillow 套件我們要使用的部份。
底下,我將我 pic 資料夾底下的所有檔案名稱存入 picList,然後用 for 迴圈讀出來。
為了示範,這裡只有讀取第一張就結束了。
# Crop newImage = image.crop((780, 310, 1080, 610)) newImage.show()
這一段才是我今天筆記的重點。
image.crop((x, y, dx, dy))
當然,座標是我事先用小畫家看好的。
Output:
如上。
緊接著我們取消圖片的顯示,並將 exit()
移除,將圖片存入 Icons 資料夾底下。
最終程式碼:
# -*- coding: utf-8 -*- import os import re from PIL import Image picList = os.listdir('pic') for pic in picList: if '01.png' not in pic: continue image = Image.open('pic/{}'.format(pic)) # Crop newImage = image.crop((780, 310, 1080, 610)) # Save newFileName = re.sub('01.png', '', pic) newImage.save('Icons/{}.png'.format(newFileName), quality=100)
Output:
大功告成!