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 negroP
: píxeles de 8 bits, asignados a cualquier otro modo usando una paleta de coloresRGB
: píxeles de 3×8 bits, color verdaderoRGBA
: 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 😎