解决报错OSError: cannot write mode RGBA as JPEG

一、问题描述

如题:解决报错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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山顶夕景

小哥哥给我买个零食可好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值