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.
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?
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
Das Problem bei diesem Bild ist nicht, dass es groß ist. Es handelt sich nicht um RGB, sondern um ein Indexbild .
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')
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.
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