Convertir imagen png a jpg en Python con Pillow y viceversa

Convertir imagen png a jpg en Python

Seguramente, antes o después, tengas que desarrollar algún proyecto en el que trabajes con imágenes. Una de las principales operaciones cuando se trabaja con este tipo de ficheros es la conversión de formatos. En este tutorial descubrirás lo sencillo que es convertir una imagen png a jpg en Python, o al contrario, convertir una imagen jpg a png. Para ello, haremos uso de la librería Pillow.

Pillow, la biblioteca Python para tratamiento de imágenes

Pillow es una biblioteca para el tratamiento y edición de imágenes que hereda de PIL (esta última solo da soporte hasta Python 2.7). Pillow soporta gran cantidad de formatos de imagen, entre ellos, los más comunes: JPG, PNG y GIF.

La biblioteca permite editar muchos aspectos y características de una imagen. No obstante, en este tutorial nos vamos a centrar en la conversión de formatos. Concretamente te mostraré cómo convertir una imagen png a jpg y viceversa.

Como en otras ocasiones, lo primero que tienes que hacer antes de usar una librería es instalarla. Para instalar Pillow, ejecuta el siguiente comando desde un terminal:

$> pip install pillow

Una vez instalada, ya puedes pasar a la siguiente sección.

Pero antes, te doy unos pequeños apuntes que debes tener en cuenta.

Un archivo de imagen consiste de una o más bandas de datos. Por ejemplo, una imagen PNG puede tener las bandas R, G, B y A para los valores de transparencia rojo, verde, azul y alfa. A menudo es útil pensar que cada píxel tiene un valor por banda.

Además de las bandas, otra propiedad de los archivos de imagen es el modo. El modo de una imagen define el tipo y la profundidad de un píxel en la imagen. Los modos más habituales de una imagen son:

  • L: píxeles de 8 bits, blanco y negro
  • P: píxeles de 8 bits, asignados a cualquier otro modo usando una paleta de colores
  • RGB: píxeles de 3×8 bits, color verdadero
  • RGBA: píxeles de 4×8 bits, color verdadero con máscara de transparencia

Las imágenes JPG solo soportan los modos L, RGB Y CMYK. Por su parte, las imágenes PNG soportan los modos 1, L, P, RGB, or RGBA.

Convertir una imagen png a jpg en Python

El siguiente script muestra cómo convertir una imagen png a jpg en Python:

from PIL import Image

im = Image.open('logo-python.png')
im.save('logo-python.jpg', quality=95)

Básicamente, abrimos una imagen, esto crea un objeto Image, y la guardamos con el nombre que queramos pero con extensión .jpg.

Por defecto, Pillow intenta establecer el formato de la imagen en función de la extensión del nombre del archivo.

Es probable que si la imagen png contiene transparencias, su modo sea RGBA o P. En estos casos es necesario convertir el modo de la imagen ya que, si no lo haces, te aparecerá un error similar a este:

KeyError: 'RGBA'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File 
  ...
  in _save
    raise OSError("cannot write mode %s as JPEG" % im.mode)
OSError: cannot write mode RGBA as JPEG

Process finished with exit code 1

Si esto ocurre, modifica el script anterior por este otro:

from PIL import Image

im = Image.open('logo-python.png')
rgb_im = im.convert('RGB')
rgb_im.save('logo-python.jpg', quality=95)

Como puedes apreciar, se convierte el modo de la imagen a RGB.

Fíjate también que al método save() se le pasa el argumento quality. Este parámetro establece la calidad de la imagen jpg. El rango de valores del parámetro quality va desde el 1 (peor calidad) a 95 (mejor calidad). El valor por defecto es 75. No se recomiendan valores por encima de 95 porque se deshabilita el algoritmo de compresión que utiliza este formato de imagen.

Convertir una imagen jpg a png en Python

De igual modo, para convertir una imagen jpg a png en Python con Pillow, utilizaremos un script similar al que vimos en la sección anterior:

from PIL import Image

im = Image.open('logo-python.jpg')
im.save('logo-python-2.png')

Conclusión

En este tutorial has visto lo sencillo que es convertir imágenes en Python con Pillow.

Basta con cargar una imagen y guardarla añadiendo al nombre la extensión del formato de destino 😎

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento