por - Convierte png a jpeg usando Pillow in python
imagenes en python (3)
Deberías usar el método convert ():
from PIL import Image
im = Image.open("Ba_b_do8mag_c6_big.png")
rgb_im = im.convert(''RGB'')
rgb_im.save(''colors.jpg'')
más información: http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert
Estoy tratando de convertir png a jpeg usando una almohada. He intentado varios scrips sin éxito. Estos 2 parecían funcionar en pequeñas imágenes png como esta.
Primer codigo
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.
Me estoy poniendo
Rastreo (llamadas recientes más última):
Archivo "png_converter.py", línea 14, en
bg.paste (imagen, (0,0), imagen) Archivo "/usr/lib/python2.7/dist-packages/PIL/Image.py", línea 1328, en pegar
self.im.paste (im, box, mask.im) ValueError: máscara de transparencia incorrecta
¿Qué estoy haciendo mal?
El problema con esa imagen no es que sea grande, es que no es RGB, específicamente que es una imagen de índice.
Así es como lo convertí usando el shell:
>>> 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)
Así que agregue un cheque para el modo de la imagen en su código:
if not im.mode == ''RGB'':
im = im.convert(''RGB'')
Puede convertir la imagen abierta como RGB y luego puede guardarla en cualquier formato. El código será:
from PIL import Image
im = Image.open("image_path")
im.convert(''RGB'').save("image_name.jpg","JPEG") #this converts png image as jpeg
Si desea un tamaño personalizado de la imagen, simplemente cambie el tamaño de la imagen mientras abre de esta manera:
im = Image.open("image_path").resize(x,y)
y luego convertir a RGB y guardarlo.
El problema con su código es que está pegando el png en un bloque RGB y guardándolo como jpeg mediante codificación. en realidad no estás convirtiendo un png a jpeg.