我正在使用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
答案 0 :(得分:0)
尝试:-
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通过查看文件的扩展名来确定它。
P.S。:-:如果考虑到图像的透明度(alpha通道),请不要使用此方法,因为此方法将摆脱图像的alpha通道。
答案 1 :(得分:0)
要调整图像大小,我一直使用.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')