[英]How to resize Images using PIL in a folder in python
我正在使用PIL / Python來調整文件夾中的圖像大小。 調整圖像大小后,我想再次將它們保存在同一個文件夾中,但是我有錯誤,無法將RGBA模式寫為JPEG
文件夾中有多種格式的圖像
這是用於調整圖像大小的代碼
path = "data/images/"
dirs = os.listdir( path )
def resize():
for item in dirs:
if os.path.isfile(path+item):
im = Image.open(path+item)
f, e = os.path.splitext(path+item)
imResize = im.resize((200,200), Image.ANTIALIAS)
imResize.save(f, 'JPEG', quality=90)
resize()
這是我遇到的錯誤
cannot write mode RGBA as JPEG
嘗試:-
f = "apple.png"
im = Image.open(path+item)
im = im.convert("RGB")
imResize = im.resize((200,200), Image.ANTIALIAS)
imResize.save(f, quality=90)
我們從圖像中刪除了Alpha通道,並將顏色空間僅轉換為RGB
。 由於大多數文件格式支持具有RGB色彩空間的圖像,我不認為錯誤仍將繼續存在。
不要將所有輸入圖像的輸出格式明確定義為.jpeg
,而是讓PIL通過查看文件的擴展名來確定它。
PS: -如果考慮圖像的透明度(alpha通道),請不要使用此方法,因為此方法將擺脫圖像的Alpha通道。
為了調整圖像大小,我總是使用.thumbnail
。 它易於使用,而且很簡單。 為了保留顏色和alpha的數據, Vasu Deo.S帶來的解決方案運行良好,這是我在腳本上使用的解決方案。
您需要將圖像保存為.png
而不是.jpeg
以避免Alpha通道的錯誤。
所以這里編輯的代碼實際上是有效的。
path = "data/images/"
dirs = os.listdir( path )
def resizeImages():
for item in dirs:
if os.path.isfile(path+item):
im = Image.open(path+item)
im = im.convert('RGBA')
size = 200, 200
imResize.thumbnail(size)
f, e = os.path.splitext(path+item)
imResize.save(f+'.png')
請注意,這需要保存為.png
。 如果要保存為.jpeg
圖像,則必須使用以下方法刪除alpha通道:
path = "data/images/"
dirs = os.listdir( path )
def resizeImages():
for item in dirs:
if os.path.isfile(path+item):
im = Image.open(path+item)
im = im.convert('RGBA')
data = np.array(im)
red, green, blue, alpha = data.T
alpha_areas = (red == 0) & (blue == 0) & (green == 0) & (alpha == 0) # set alpha to 0
data[..., :-1][alpha_areas.T] = (255,255,255)
im = Image.fromarray(data)
size = 200, 200
imResize = im.thumbnail(size)
f, e = os.path.splitext(path+item)
imResize.save(f+'.png')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.