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