无法将RGBA模式写入JPEG

120

我正在学习使用书籍《用Python自动化繁琐的事情》中介绍的'pillow 5.0'

有关图像对象的信息

In [79]: audacious = auda
In [80]: print(audacious.format, audacious.size, audacious.mode)
PNG (1094, 960) RGBA

当我尝试转换文件类型时,它报告错误。

In [83]: audacious.save('audacious.jpg')
OSError: cannot write mode RGBA as JPEG

这本书中没有这样的错误。


2
重复的答案并不完全是重复的,但它可以帮助您解决问题 - 我的答案包含了您出现此错误的原因。 - Patrick Artner
1
我赞同这个观点。这个问题特指如何解决那个异常。我在不使用PNG的情况下遇到了这个问题,否则可能无法发现它。 - Justin Meiners
1个回答

263

JPG 不支持 透明度 - RGBA 意味着 绿Alpha - Alpha透明度

您需要放弃 Alpha 通道或保存为支持透明度的格式,例如 PNG

Image 类有一个 convert 方法,可以将 RGBA 转换为 RGB - 然后您就可以保存为 JPG

请查看这里:图像类文档

im = Image.open("audacious.png")
rgb_im = im.convert('RGB')
rgb_im.save('audacious.jpg')

根据dm2013在“使用Pillow将png转换为jpeg”的答案进行了修改


34
如@timop在这个答案中提到的,更有效率的方法是先检查图像是否处于RGBA/P格式,然后再转换为RGB格式:if im.mode in ("RGBA", "P"): im = im.convert("RGB") - Prahlad Yeri
2
@Prahlad 如果你不知道你有一个 RGBA,那么最好先了解一下 - 这个问题一开始就使用了 RGBA。 - Patrick Artner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接