| Artículos | 01 SEP 1996

El formato PNG

Tags: Histórico
Nuevo estándar de archivo gráfico
Jaime Peña.

El hasta ahora estándar GIF, parece que dejará de serlo en tal extensión y se acudirá a un nuevo tipo de archivo gráfico denominado Portable Network Graphics (PNG), libre de todo tipo de derechos de autoría.

Internet es cada vez más visual, más interactivo y más apetitoso para el mundo empresarial. Tal vez por ello, él hasta el presente estándar gráfico de facto (archivos GIF, Graphics Interchange Format) se reveló como una inestimable fuente de ingresos por parte de aquellos que tenían derechos adquiridos acerca de su algoritmo de compresión. De ahí, rápidamente surgió la idea de crear un nuevo tipo de archivo gráfico, cuidadosamente diseñado desde sus inicios, que debería suplirlo, mejorando muchas de sus funcionalidades y, sobre todo, que no estuviera amparado bajo las estrictas leyes del derecho de copia.

Cuando ha pasado poco mas de un año de la convulsión creada por los problemas con el formato GIF, las cosas se han ido clarificando. El propio GIF sigue siendo usado de forma masiva, pero ya coexiste con JPEG y empieza a verse la extensión del formato alternativo, denominado Portable Network Graphics (PNG), del que pasaremos a describir el estado actual de su especificación, las bases de su programación y la disponibilidad de APIs de desarrollo de libre uso.

Las últimas especificaciones (borradores y propuestas) del estándar PNG, podrá localizarlas en la dirección de Internet: http://www.boutell.com/boutell/png

Por otra parte, en la dirección siguiente, encontrará un excelente editor/conversor de imágenes gráficas denominado WebImage, que incluye el formato PNG: http://www.group42.com

También hay otros muchos productos que soportan PNG: ACDSee y ACDSee95 (obtenible en http:// vvv.com/ acd/acd/acdsee.htm y acdsee95.htm); CompuPic (obtenible en http:// www.photodex.com/cpic.htm); CompuShow, Graphics Workshop y PaintShop Pro 32-bits (entorno Windows, círculos shareware); plug-in de Adobe (Adobe); SEA y Fractint (entorno DOS, círculos shareware) y numerosos programas de edición/conversión gráfica en general (normalmente sólo las versiones más recientes). Un excelente lugar de partida para obtenerlos y enlazar con información de archivos, código ejemplo, especificaciones, etc., es http:// quest.jpl. nasa. gov/ PNG.

PNG frente a GIF

El formato PNG parte como una propuesta sustitutiva del formato GIF, bueno será que sepamos cuales son sus diferencias, que según sus creadores no sólo lo hacen libre de pagos a terceros y con acceso libre a todo el código fuente, sino también mejor en el soporte gráfico. El formato PNG se plantea como una alternativa a GIF y, a la vez, un complemento del formato JPGE. Entre sus características fundamentales, se citan:

- Mejoras en sus algoritmos de compresión, que lo hacen un 20-30% más eficiente que el LZW del formato GIF.

- Soporte para imágenes True Color de hasta 48-bits, claramente superior a los actuales formatos gráficos, que alcanzan 24-bits.

- Soporte para archivos en escalas de grises de 1, 2, 4, 8 y 16 bits por pixel, canal Alpha y transparencia en modos de 8 y 16-bits (no sólo ON/OFF como en el formato GIF), imágenes de paletas mapeadas de hasta 256 colores (1, 2, 4 y 8-bits).

- Independencia multiplataforma y muestra progresiva, para mejorar la eficiencia en los accesos a Internet (no necesidad de carga total para ser mostrada la imagen).

- Archivo basado en múltiples CRCs (controles de redundancia) intermedios, para verificar la correcta recepción sin necesidad de esperar a recibir todo el archivo.

- Una cabecera especialmente diseñada para comprobar los tipos más comunes de corrupción.

Estructura de un archivo PNG

Un archivo PNG contiene una cabecera identificadora (signature, véase la Figura 1), seguida por una serie de grupos de datos (chunks). La cabecera contiene 8 bytes y cada grupo de datos una longitud variable, con apartados de longitud, nombre, bytes de datos y un CRC propio del grupo. Los grupos de datos no están dispuestos en un orden fijo, pudiendo ser ordenados y recuperados en cualquier secuencia. Observe, sin embargo, que sí hay un orden de precedencia entre algunos tipos de chunks, tal como se describe en la tabla adjunta de la Figura 3.

Un grupo de datos (chunk) tiene una estructura cuidadosamente diseñada (véase la Figura 2). Su primer grupo de 4 bytes contiene la longitud de los datos, seguidos de otros cuatro que codifican el tipo de chunk de que se trata (véase la tabla de la Figura 3, en la que se recogen los más importantes).

El nombre de tipo de datos está siempre conformado por cuatro letras, en las que la mayuscularización de la primera y la última tiene un especial significado. Así, si la primera es mayúscula, por ejemplo IHDR, implica que este chunk es vital para la correcta interpretación y recuperación de la imagen; si es minúscula, puede generarse una imagen significativa aunque no se haya implementado su correcta interpretación (el decodificador no sepa de que tipo de datos se trata) o se haya producido una corrupción en la recepción del archivo.

Respecto a la última letra del nombre, si es mayúscula implica que el chunk puede ser copiado con sentido en otro archivo PNG. Esto es, hay grupos de datos, imagínese un comentario textual, que puede servir para un grupo de archivos PNG y ser tomado de uno y transferido a otro que estemos generando. Otros, por contra, perderán su sentido y la copia puede causar errores o problemas en la generación de imágenes, un ejemplo sería la paleta de color a utilizar. También la segunda letra puede estar minuscularizada; sólo se utiliza así en entornos de desarrollo del estándar, cuando se está comprobando un nuevo tipo de grupo de datos.

Advierta que en las tablas de la Figura 3 y 4 hemos recogido los chunks básicos y complementarios actualmente aprobados, pero el formato PNG permite extender su contenido a otros, bien que se incorporen en lo sucesivo al estándar, bien que sean definidos por usuarios para fines concretos. Eso es así porque el formato PNG es funcionalmente extensible y se pueden crear imágenes sin precisar interpretar todos los grupos de datos (obviamente siempre que no sean vitales, de hay la mayuscularización de sus nombres). Por tanto, será sencillo implementar decodificadores (lectores y reproductores PNG) que sean parciales y sólo lean y generen partes de una imagen.

API de desarrollo

En el momento actual (los archivos tienen fecha de 20 de agosto de 1995), está disponible la versión 1.0 beta 2 (denominada también versión 0.80) de la biblioteca gráfica y la biblioteca de compresión en su versión 0.95, referentes en su conjunto al API de desarrollo de codificación y decodificación de archivos PNG. Se incluyen varios ejemplos sencillos y makefiles para los compiladores más utilizados del mercado en diversas plataformas (IBM-PC, Macintosh, Amiga, UNIX, MIPS, VMS, etc.) y se dispone de un grupo de archivos gráficos de prueba. Hemos de advertir que en el momento de escribir este artículo, estaba ya prevista la salida de la beta 3 (versión 0.88).

El conjunto de APIs consta de una biblioteca de estructuras del formato gráfico en sí (LIBPNG) y otra de la implementación del sistema de compresión de datos (ZLIB). Se precisará compilar ambas para el entorno específico de cada programador, proporcionándose, como hemos insistido repetidamente, todas las fuentes. Ese será el primer paso, posteriormente hemos de incluir estas bibliotecas enlazándolas en las aplicaciones codificadoras y/o decodificadoras de archivos gráficos PNG.

Fundamental será definir cuáles de las capacidades no básicas de nuestro programa deseamos imp

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información