Sto prototipando un processore di immagini in Python 2.7 utilizzando PIL1.1.7 e vorrei che tutte le immagini finissero in JPG. I tipi di file di input includeranno tiff, gif, png sia con trasparenza che senza. Ho cercato di combinare due script che ho trovato che 1. convertire altri tipi di file in JPG e 2. rimuovere la trasparenza creando un'immagine bianca vuota e incollando l'immagine originale su uno sfondo bianco. Le mie ricerche vengono spammate con persone che cercano di generare o preservare la trasparenza piuttosto che il contrario.PIL Converti PNG o GIF con trasparenza in JPG senza
Attualmente sto lavorando con questo:
#!/usr/bin/python
import os, glob
import Image
images = glob.glob("*.png")+glob.glob("*.gif")
for infile in images:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
#try:
im = Image.open(infile)
# Create a new image with a solid color
background = Image.new('RGBA', im.size, (255, 255, 255))
# Paste the image on top of the background
background.paste(im, im)
#I suspect that the problem is the line below
im = background.convert('RGB').convert('P', palette=Image.ADAPTIVE)
im.save(outfile)
#except IOError:
# print "cannot convert", infile
Entrambi gli script funzionano in modo isolato, ma come li ho combinato io ottenere un ValueError: Bad maschera di trasparenza.
Traceback (most recent call last):
File "pilhello.py", line 17, in <module>
background.paste(im, im)
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1101, in paste
self.im.paste(im, box, mask.im)
ValueError: bad transparency mask
Ho il sospetto che se dovessi salvare un PNG senza trasparenza potevo quindi aprire tale nuovo file, e ri-salvarlo come JPG, ed eliminare i PNG che è stato scritto su disco, ma sono sperando che ci sia una soluzione elegante che non ho ancora trovato.
Perché si aspettano che il problema è la "linea sotto" quando il codice viene barfing su '.paste()' e non arrivando nemmeno a quella linea? – kindall