一、问题描述
如题:解决报错OSError: cannot write mode RGBA as JPEG,这个错误是在下面代码中出现的:
from PIL import Image
# 打开图片
root_path = "xx"
this_image_path = root_path + "example3/4.png"
img = Image.open(this_image_path) # .convert('RGB')
this_save_path = root_path + "ya_pic/4_ya.jpeg"
img.save(this_save_path, format="JPEG")
# img.save(this_save_path, quality=quality_value)
二、解决方法
- 这个错误通常发生在尝试将含有透明度通道的图片(如RGBA模式的PNG图片)保存为JPEG格式时,因为JPEG不支持透明度。解决方法是在保存之前将图片转换为不带透明度的模式,比如RGB。使用Pillow库,可以这样做:
from PIL import Image
img = Image.open('path_to_your_image.png').convert('RGB')
img.save('path_to_save_image.jpeg', 'JPEG')
这段代码将图片从RGBA模式转换为RGB模式,然后保存为JPEG格式,从而避免了这个错误。
- PNG图像有RGBA四个通道,而BMP和JPG图像只有RGB三个通道,所以我们可以将程序中所有图片的保存形式改为PNG
- RGBA意思是红色,绿色,蓝色,Alpha的色彩空间,Alpha指透明度。JPG、JPEG不支持透明度。
三、拓展
对于PIL模块来说,其模式包括以下几种:
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
Reference
[1] https://pillow-docs-cn.readthedocs.io/zh-cn/latest/