Conociendo el formato PNG
Recientemente escribí, a modo de introducción, sobre los formatos de imagen más empleados en web. Hoy, quiero centrarme en el formato PNG, Portable Network Graphics, que nace en 1996 como una alternativa libre y mejorada al formato GIF.
Allá por 1987 y principios de los ‘90, GIF era un formato que solucionaba perfectamente las necesidades del momento. 256 colores en un mundo donde la mayoría de las pantallas eran en monocromo era más que suficiente. Además, soporta píxeles transparentes. Pasado el tiempo, estar atrapado en una paleta limitada de colores, facilitaba la compresión y su transferencia por redes que no eran muy rápidas.
Pero GIF era un formato propietario y sujeto a patentes. Las redes se hicieron más rápidas y las pantallas empezaron a poder representar miles e incluso millones de colores.
Acerca de los colores
PNG fue diseñado para guardar imágenes que serían mostradas por pantallas. Por ello, trabaja únicamente con el modelo de color RGB. Pese a esto, PNG es muy flexible en opciones en cuanto al color se refiere. Permite manejar varias profundidades de color, desde el blanco y negro (1 bit por píxel), hasta más de 16 millones de colores con varios grados de transparencia (32 bit por píxel).
PNG-24
El número 24 hace referencia a la profundidad de color, en bits por píxel, que es capaz de representar la imagen. PNG-24 es capaz de almacenar 224, o dicho de otro modo 16,777,216, colores diferentes.
Permite, además, añadir un canal alfa, permitiendo diferentes grados de opacidad en cada píxel con independencia del color. Se convierte, en este caso en una especie de PNG-32. Digo «una especie de» porque, como entenderás más adelante, este canal alfa se almacena aparte de la imagen.
PNG-8
En el modo de 8 bits, trabaja con color indexado. Con el formato PNG se puede almacenar una paleta de hasta 256 colores empleados en la imagen. En lugar de guardar el valor del color de cada píxel (24bit por píxel), crea una lista de colores, y a cada píxel le asigna el índice de la lista que contiene el color (como máximo 8bits por píxel). Esto reduce de tamaño del fichero. Además, PNG evita almacenar entradas no necesarias en la paleta. por lo que para una imagen de 4 colores, no necesita 256 entradas en la paleta y la imagen se guardará a 2bit por píxel. En esta modalidad, PNG no puede manejar diferentes niveles de opacidad.
El archivo PNG desde dentro
Un archivo PNG está dividido en secciones, unas críticas y otras auxiliares siendo las críticas necesarias para el cumplimiento del estándar y las auxiliares optativas, o personalizadas. Un decodificador PNG debe poder entender, como mínimo las secciones críticas que contienen: la cabecera; la paleta, de hasta 256 colores; la imagen, RGB y dividida en varias subsecciones (IDAT); y la marca de final de archivo. En las auxiliares se guardan cosas como la información de transparencia (tRNS), gamma (gAMA), color de fondo por defecto, entre otros. Estas secciones auxiliares, consiguen, además que el fichero PNG soporte mejoras en el tiempo mientras sigue manteniendo la compatibilidad básica hacia atrás.
Compresión
Para comprimir el fichero, PNG emplea el método DEFLATE, básicamente el mismo empleado por ZIP o GZIP (gz) entre otros, aplicando un filtro con cinco modos de predicción de píxel que se aplican por cada línea de la imagen. Es en la habilidad para escoger correctamente entre estos cinco filtros, donde ciertas aplicaciones consiguen resultados más o menos óptimos. En efecto, en un PNG cada línea de una imagen tiene una compresión diferente.
DEFLATE usa el algoritmo LZ77 que busca secuencias de bytes repetidos, y posteriormente le aplica el algoritmo de Huffman que asigna un identificador a las cadenas de forma que las más repetidas sean las que tienen el identificador más corto.
Como ves, el formato PNG no aplica transformaciones en la imagen, como sí hace el algoritmo JPEG, más allá de si tú eliges guardarla en modo de 256 colores indexados. La imagen mantiene todas sus características sin pérdida de calidad.
Debido al método de compresión utilizado, PNG obtendrá un tamaño pequeño si no hay muchos cambios de colores en las líneas y más grandes si la imagen tiene muchos cambios de color. Entonces:
¿Cuándo usar PNG?
PNG es bueno:
- para imágenes, destinadas a ser mostradas en pantallas, con pocas variaciones de color o donde necesites precisión en el color y limpieza en las formas.
- Si requieres niveles distintos de transparencia.
- Para guardar una imagen original sin miedo a la pérdida de calidad.
¿Para qué no es bueno PNG?
PNG se diseñó para ser visualizado en pantallas. No soporta CMYK porque las pantallas no trabajan en ese modo de color, por esto no es un buen formato apto para impresión. También es cierto que, en tu impresora de casa, posiblemente no notes diferencia.
La imagen de los dados fue obtenida de: https://commons.wikimedia.org/wiki/File:PNG_transparency_demonstration_2.png