簡體   English   中英

如何在python中的文件夾中使用PIL調整圖像大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM