2017-04-06 19 views
10

Próbuję przekonwertować png do jpeg przy użyciu poduszkę. Próbowałem kilku skryptów bez powodzenia. Te 2 wydawały się działać na małych obrazach png, takich jak ten.Konwersja png do jpeg przy użyciu poduszką w python

enter image description here

Pierwszy kod:

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") 

Drugi kod:

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) 

Ale gdy próbuję przekonwertować większy obraz jak ten

Dostaję

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

Co robię źle?

+0

próbowałeś [to] (http : //stackoverflow.com/questions/7911451/pil-convert-png-or-gif-with-transparency-to-jpg-without)? –

+0

tak zrobiłem, to pierwszy przykład –

Odpowiedz

3

można przekonwertować otwartą obraz jako RGB, a następnie można go zapisać w dowolnym formacie. Kod będzie:

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

Jeśli chcesz niestandardowy rozmiar obrazu po prostu zmienić rozmiar obrazu podczas otwierania tak:

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

a następnie przekonwertować na RGB i zapisać go.

Problem z kodem jest to, że są wklejając PNG w bloku RGB i zapisanie go jako JPEG ciężką kodowania. w rzeczywistości nie konwertujesz png na jpeg.

+0

wszystkie odpowiedzi są dobre, dziękuję, ale każdy ideea jak można skompresować aswell rozmiar? –

+0

Spróbuj zoptymalizować = Prawda podczas zapisywania obrazu. – Mani

3

Problem z tym obrazie nie jest on duży jest to, że nie jest RGB, zwłaszcza że to jest obraz indeksu. enter image description here

Oto jak ja konwertowane go za pomocą powłoki:

>>> 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) 

Więc dodać czek dla trybu obrazu w kodzie:

if not im.mode == 'RGB': 
    im = im.convert('RGB') 
Powiązane problemy