在python中使用Pillow将png转换为jpeg

ale*_*lex 38 python image python-imaging-library python-3.x

我正在尝试使用枕头将png转换为jpeg.我试过几次没有成功.这两个似乎适用于像这样的小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")
Run Code Online (Sandbox Code Playgroud)

第二个代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

我越来越

Traceback(最近一次调用最后一次):

  文件"png_converter.py",第14行,in 

    bg.paste(image,(0,0),image)文件"/usr/lib/python2.7/dist-packages/PIL/Image.py",第1328行,粘贴

    self.im.paste(im,box,mask.im)ValueError:错误的透明度掩码

我究竟做错了什么?

小智 74

你应该使用convert()方法:

from PIL import Image

im = Image.open("Ba_b_do8mag_c6_big.png")
rgb_im = im.convert('RGB')
rgb_im.save('colors.jpg')
Run Code Online (Sandbox Code Playgroud)

更多信息:http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert

  • @lifeisshubh 白色应该转换成黑色吗?! (7认同)
  • 我对此笑得很厉害。@lifeisshubh 您的意思是“它使图像的白色背景变成黑色吗?” (2认同)
  • 据我记得它已经解决了。但已经过去很长时间了,我既没有我正在使用的那个系统,也没有那个代码。时间会冲淡一切。 (2认同)

Jer*_* S. 13

该图像的问题并不是它很大,而是它不是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)
Run Code Online (Sandbox Code Playgroud)

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

if not im.mode == 'RGB':
  im = im.convert('RGB')
Run Code Online (Sandbox Code Playgroud)


Man*_*ani 9

您可以将打开的图像转换为RGB,然后您可以将其保存为任何格式.代码将是:

from PIL import Image
im = Image.open("image_path")
im.convert('RGB').save("image_name.jpg","JPEG") #this converts png image as jpeg
Run Code Online (Sandbox Code Playgroud)

如果您想要自定义尺寸的图像,只需调整图像大小,同时打开如下:

im = Image.open("image_path").resize(x,y)
Run Code Online (Sandbox Code Playgroud)

然后转换为RGB并保存.

您的代码的问题是您将png粘贴到RGB块并通过硬编码将其保存为jpeg.你实际上并没有将png转换成jpeg.