2017-04-06 96 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')