Definición
El formato PNG (Portable Network Graphics) es un formato de archivos de gráficos de mapa de bits (una trama).
Permite una alta compresión, una reproducción progresiva de imágenes con hasta 16,7 millones de colores, y
soporta muy bien la transparencia de las imágenes.
¿Quién lo propuso?
El formato de imágenes PNG fue creado por el grupo llamado PNG, conformado por empresas Compuserve, Netscape,
Spyglass y el Consorcio WWW (W3C).
Fue desarrollado en 1995 como una alternativa gratuita al formato GIF, cuyos derechos pertenecen a Unisys.
Caracteristicas
- Almacena el número de canales que tenga la imagen, si está en escala de grises, en color y si cuenta con
un canal alfa o transparencia.
- Almacena de una imagen los valores de gamma, color del fondo, soporta corrección de color e independiza
la imagen del monitor.
- Almacena una profundidad de color de 16 bits por píxel en blanco y negro, en RGB una profundidad de
color de 48 bits por píxel.
- Almacena los mecanismos de corrección de errores para garantizar la integridad del archivo.
¿Cuándo usar PNG?
- Para imágenes destinadas a ser mostradas en pantallas donde necesites precisión en el color y limpieza
en las formas.
- Si requieres niveles distintos de transparencia.
- Almacena una profundidad de color de 16 bits por píxel en blanco y negro, en RGB una profundidad de
color de 48 bits por píxel.
- Para guardar una imagen original sin miedo a la pérdida de calidad.
¿Cuándo NO usar PNG?
- PNG se diseñó para ser visualizado en pantallas y no soporta CMYK, por esto no es un buen formato apto
para impresión.
- La principal desventaja es que PNG no permite crear pequeñas animaciones como el formato GIF. Existe un
formato complementario del W3C llamado MNG que sí que soporta animación pero aun no existe un estándar
oficial del mismo.
Versiones
- 1996: La especificación completa de PNG se publicó bajo la aprobación de W3C el 1 de octubre de 1996 y
luego como el RFC 2083 el 15 de enero de 1997.
- 1998: VERSIÓN 1.1. Esta especificación se revisó el 31 de diciembre de 1998 como la versión 1.1, que
abordaba
problemas técnicos para gamma y corrección de color.
- 1999: VERSIÓN 1.2. Lanzada el 11 de agosto de 1999, agregó el fragmento iTXt como el único cambio de la
especificación.
- 2003: VERSIÓN 1.2. Se lanzó una versión formateada de 1.2 como una segunda edición del estándar W3C el
10 de noviembre de 2003,
- 2004: Se lanzó como estándar internacional (ISO /IEC 15948:2004) el 3 de marzo de 2004.
¿Cómo funciona la compresion del PNG?
El proceso de compresión de PNG es completamente sin pérdidas; lo que significa que el archivo comprimido
puede reconstruir la imagen de origen exactamente. PNG utiliza un proceso de compresión de 2 etapas:
- Precompresión: filtrado (predicción).
- Compresión: DEFLATE.
Filtrado
El formato PNG utiliza la codificación delta en un formato que llama "filtrado". Para cada línea de
exploración de píxeles, se codifica un píxel X en relación con el píxel de la izquierda, el píxel de arriba
y el píxel de arriba a la izquierda. Por ejemplo, si codificamos un píxel determinado enumerando su
diferencia entre el promedio de A y B (X-((A+B)/2), obtendremos:
PNG permite elegir 1 de 5 modos diferentes de filtrado por línea:
- Sin filtros.
- Diferencia entre X y A.
- Diferencia entre X y B.
- Diferencia entre X y (A + B)/2 (también conocido como promedio).
- Predictor de Paeth (función lineal de A,B,C).
Deflate
Una vez que se ha producido el filtrado en una línea de exploración, pasa a un descendiente del algoritmo LZ77
conocido como DEFLATE, un método de compresión con una ventana deslizante (datos sin comprimir decodificados) de
32768 bytes como máximo.
Los flujos de datos comprimidos y desinflados dentro de PNG se almacenan en el formato "zlib", que tiene la
estructura:
- Método de compresión/código de banderas: 1 byte.
- Indicadores/bits de control adicionales: 1 byte.
- Bloques de datos comprimidos: n bytes.
- Diferencia entre X y (A + B)/2 (también conocido como promedio).
- Valor de comprobación: 4 bytes.
Los datos comprimidos dentro del flujo de datos zlib se almacenan como una serie de bloques.