2017-04-06 98 views
10

我正在尝试将png转换为使用枕头的jpeg。我已经尝试了几个脚本没有成功。这两个似乎适用于像这样的小png图像。使用Python中的枕头将png转换为jpeg

enter image description here

首先代码:

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 

    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

我到底做错了什么?

+0

你试过[这](HTTP ://stackoverflow.com/questions/7911451/pil-convert-png-or-gif-with-transparency-to-jpg-without)? –

+0

是的,我做了,这是第一个例子 –

回答

3

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

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

如果你想在图像的自定义尺寸只是调整图像大小,同时打开是这样的:

im = Image.open("image_path").resize(x,y) 

,然后转换为RGB格式并保存。

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

+0

所有的答案都很好,谢谢,但任何ideea如何可以压缩大小以及? –

+0

保存图像时尝试optimize = True。 – Mani

3

与图像的问题不在于它的大,这是它不是RGB,特别是这是一个索引图像。 enter image description here

以下是我把它转换使用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')