使用 Pillow 将 png 转换为 jpeg

新手上路,请多包涵

我正在尝试使用枕头将 png 转换为 jpeg。我试过几个纸条都没有成功。这 2 个似乎适用于像这样的小 png 图像。

在此处输入图像描述

第一个代码:

 from PIL import Image
import os, sys

im = Image.open("Ba_b_do8mag_c6_big.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save("colors.jpg")

第二个代码:

 image = Image.open('Ba_b_do8mag_c6_big.png')
bg = Image.new('RGBA',image.size,(255,255,255))
bg.paste(image,(0,0),image)
bg.save("test.jpg", quality=95)

但是如果我尝试转换像这样的更大的图像

我越来越

Traceback (most recent call last):
  File "png_converter.py", line 14, in <module>
    bg.paste(image,(0,0),image)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1328, in paste
    self.im.paste(im, box, mask.im) ValueError: bad transparency mask

我究竟做错了什么?

原文由 alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 817
2 个回答

该图像的问题不是它太大,而是它不是 RGB,特别是它是索引图像。 在此处输入图像描述

这是我使用 shell 转换它的方法:

 >>> from PIL import Image
>>> im = Image.open("Ba_b_do8mag_c6_big.png")
>>> im.mode
'P'
>>> im = im.convert('RGB')
>>> im.mode
'RGB'
>>> im.save('im_as_jpg.jpg', quality=95)

因此,在您的代码中添加对图像模式的检查:

 if not im.mode == 'RGB':
  im = im.convert('RGB')

原文由 Jeremy S. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题