Convertir png a jpeg usando Pillow
Estoy tratando de convertir png a jpeg usando almohada. He intentado varios scrips sin éxito. Estos 2 parecía funcionar en pequeñas imágenes png como éste.
Primer código:
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")
Segundo código:
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)
Pero si intento convertir una imagen más grande como esta
obtengo
Traceback (most recent call last):
File "png_converter.py", line 14, in <module>
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
¿Qué estoy haciendo mal?
38
3
Debe utilizar el método convert():
más información: http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert
El problema con esa imagen no es que sea grande, es que no es RGB, concretamente que es una imagen índice.
Aquí'es cómo lo convertí usando el shell:
Así que añade una comprobación del modo de la imagen en tu código:
Puedes convertir la imagen abierta como RGB y luego puedes guardarla en cualquier formato. El código será:
Si desea personalizar el tamaño de la imagen sólo cambiar el tamaño de la imagen al abrir como este:
y luego convertir a RGB y guardarlo.
El problema con su código es que usted está pegando el png en un bloque RGB y guardarlo como jpeg por codificación dura. en realidad no está convirtiendo un png a jpeg.