it-swarm.com.de

Konvertieren Sie PNG in JPEG mit Pillow in Python

Ich versuche, PNG in JPEG mit Kissen zu konvertieren. Ich habe mehrere Scrips ohne Erfolg ausprobiert. Diese 2 schienen mit kleinen Png-Bildern wie diesem zu funktionieren.

 enter image description here

Erster Code:

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

Zweiter Code: 

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)

Aber wenn ich versuche, ein größeres Bild wie dieses zu konvertieren

ich erhalte

Traceback (letzter Anruf zuletzt):

 Datei "png_converter.py", Zeile 14, in

 bg.paste (image, (0,0), image) Datei "/usr/lib/python2.7/dist-packages/PIL/Image.py", Zeile 1328, in Einfügen

 self.im.paste (im, box, mask.im) ValueError: schlechte Transparenzmaske

Was mache ich falsch?

26
alex

Sie sollten die convert () -Methode verwenden:

from PIL import Image

im = Image.open("Ba_b_do8mag_c6_big.png")
rgb_im = im.convert('RGB')
rgb_im.save('colors.jpg')

weitere Informationen: http://pillow.readthedocs.io/de/latest/reference/Image.html#PIL.Image.Image.convert

49
dm2013

Das Problem bei diesem Bild ist nicht, dass es groß ist. Es handelt sich nicht um RGB, sondern um ein Indexbild .  enter image description here

So habe ich es mit der Shell konvertiert:

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

Fügen Sie also eine Überprüfung für den Modus des Bildes in Ihrem Code hinzu:

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

Sie können das geöffnete Bild in RGB konvertieren und dann in einem beliebigen Format speichern. Der Code wird sein:

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

Wenn Sie eine benutzerdefinierte Größe des Bildes wünschen, ändern Sie die Größe des Bildes, während Sie es öffnen:

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

und dann in RGB konvertieren und speichern.

Das Problem mit Ihrem Code besteht darin, dass Sie den PNG-Code in einen RGB-Block einfügen und ihn durch harte Codierung als JPEG speichern. Sie konvertieren nicht wirklich ein PNG in JPEG.

5
Mani

wenn Sie mit der Größenänderung konvertieren möchten, probieren Sie dies aus,

from PIL import Image

img = i.open('3-D Tic-Tac-Toe (USA).png').resize((400,400)) # (x,y) pixels
img.convert("RGB").save('myimg.jpg')

das ist es .. Ihr verkleinertes und konvertiertes Bild wird am selben Ort gespeichert