批處理圖像文件大小Python代碼 OSError: cannot write mode RGBA as JPEG ,解決方案

在批處理圖像文件大小Python代碼(圖片格式都是JPG或者JPEG,以下代碼可使用):

# -*- coding: utf-8 -*-
import os
import glob
from PIL import Image
import os.path
file='D:/dogdog'


#修改圖片文件大小jpgfile:圖片文件;savedir:修改後要保存的路徑'''
def convertjpg(jpgfile, savedir, width=1280, height=800):
    img = Image.open(jpgfile)
    new_img = img.resize((width, height), Image.BILINEAR)
    new_img.save(os.path.join(savedir, os.path.basename(jpgfile)))

#''查找給定路徑下圖片文件,並修改其大小'''

def modifyjpgSize(file, saveDir):
    for jpgfile in glob.glob(file):
        convertjpg(jpgfile, saveDir)


# 測試代碼

saveDir = r'D:\dog2'
modifyjpgSize(file, saveDir)

在運行過程中,出現錯誤

OSError: cannot write mode RGBA as JPEG

原因:我的圖像文件中有png格式的。
查資料發現是PNG有RGBA四個通道,而JPG是RGB三個通道,所以PNG轉BMP時候程序不知道A通道怎麼辦,就會產生錯誤。

解決方法就是檢查通道數,捨棄A通道。
解決在代碼中加入

if 'jpg' in file[-4:]:
    im = Image.open(file)
    r, g, b, a = im.split()
    im = Image.merge("RGB", (r, g, b))
    os.remove(file)
    im.save(file[:-4] + ".jpg")

file = file[:-4] + ".jpg"

批處理圖像大小Python最終代碼(適用於圖像文件有png格式的)

# -*- coding: utf-8 -*-
import os
import glob
from PIL import Image
import os.path
file='D:/dogdog'
if 'jpg' in file[-4:]:
    im = Image.open(file)
    r, g, b, a = im.split()
    im = Image.merge("RGB", (r, g, b))
    os.remove(file)
    im.save(file[:-4] + ".jpg")

file = file[:-4] + ".jpg"

#修改圖片文件大小jpgfile:圖片文件;savedir:修改後要保存的路徑'''
def convertjpg(jpgfile, savedir, width=1280, height=800):
    img = Image.open(jpgfile)
    new_img = img.resize((width, height), Image.BILINEAR)
    new_img.save(os.path.join(savedir, os.path.basename(jpgfile)))

#''查找給定路徑下圖片文件,並修改其大小'''
def modifyjpgSize(file, saveDir):
    for jpgfile in glob.glob(file):
        convertjpg(jpgfile, saveDir)


# 測試代碼

saveDir = r'D:\dog2'
modifyjpgSize(file, saveDir)

參考:PIL PNG格式通道問題的解決方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章