Estoy creando un prototipo de procesador de imagen en Python 2.7 utilizando PIL1.1.7 y me gustaría que todas las imágenes terminen en JPG. Los tipos de archivos de entrada incluirán tiff, gif, png ambos con transparencia y sin. He intentado combinar dos scripts que encontré que 1. convertir otros tipos de archivos a JPG y 2. eliminar la transparencia creando una imagen en blanco y pegando la imagen original sobre el fondo blanco. Mis búsquedas se envían por correo electrónico con personas que buscan generar o preservar la transparencia en lugar de lo contrario.PIL Convertir PNG o GIF con transparencia a JPG sin
Actualmente estoy trabajando con esto:
#!/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
Ambas secuencias de comandos funcionan de forma aislada, sino como los he combinado Puedo obtener un ValueError: Bad máscara de transparencia.
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
Sospecho que si tuviera que guardar un png sin la transparencia que pude y luego abrir ese archivo nuevo, y volver a guardarlo como un archivo JPG, PNG y elimino el que fue escrito en el disco, pero estoy esperando que haya una solución elegante que aún no he encontrado.
¿Por qué se puede esperar que el problema es la "línea de abajo" cuando el código se Barfing en el '.paste()' y ni siquiera llegar a esa línea? – kindall