Sé un Pythonista: Recibe trucos Python y accede a nuestro espacio de Slack

Convertir imagen png a jpg en Python con Pillow y viceversa

Convertir imagen png a jpg en Python
Share on facebook
Share on twitter
Share on linkedin

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 😎

Si te ha resultado útil, compártelo con tus amigos 🤗

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

Sé un Pythonista: Recibe trucos Python y accede a nuestro espacio de Slack

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

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

Últimos posts

¿Quieres ser un auténtico Pythonista? 🐍

📩 Recibe de vez en cuando trucos, scripts y tutoriales Python en español para dominar el lenguaje. No es SPAM. Date de baja cuando quieras

🥇 Accede a nuestra comunidad privada de Slack: Pythonistas-es

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

Pythonistas-es

SÉ UN AUTÉNTICO PYTHONISTA

📩 Recibe trucos, scripts y tutoriales Python

🥇 Accede a nuestra comunidad privada de Slack