Formato GIF
Graphics Interchange Format
Estructura de bloques
GIF es uno de esos formatos que han sobrevivido décadas más de lo previsto. Lo creó CompuServe en 1987 y hoy sigue estando en todas partes, sobre todo por sus animaciones.
El formato usa una estructura de bloques que resulta refrescantemente sencilla comparada con la de los formatos modernos. Una cabecera, unos cuantos descriptores, una tabla de color, los datos de la imagen y un terminador de un solo byte que dice "se acabó".
Estructura de un archivo GIF
Cabecera GIF
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Diferencias entre versiones
Especificación original. Sin bloques de extensión.
Añadió extensiones, animación y transparencia.
Bloques de extensión
GIF89a (la revisión de 1989) añadió los bloques de extensión, que es como GIF consiguió las animaciones. Todos los bloques de extensión empiezan por 0x21 seguido de un byte de tipo, así que son fáciles de localizar cuando recorres un archivo. Algunos nos interesa conservarlos (los tiempos de la animación) y otros queremos eliminarlos (los comentarios).
Extensión de control gráfico (0xF9)
Controla los tiempos de la animación, la transparencia y el método de disposición. Va justo antes de cada descriptor de imagen en los GIF animados. Siempre se conserva.
Extensión de comentario (0xFE)
Comentarios en texto plano. Pueden contener cualquier cosa: el autor, la fecha de creación, el software o notas personales. PicScrub la elimina.
Extensión de aplicación (0xFF)
Datos específicos de cada aplicación. La más importante es NETSCAPE2.0, que controla el bucle de la animación. También puede contener metadatos XMP.
Extensión de texto plano (0x01)
Se usa muy poco. Dibuja texto con la tabla de color del GIF. El software moderno la ignora casi siempre.
Extensiones de aplicación
NETSCAPE2.0:Bucle de la animación
Controla cuántas veces se repite un GIF animado. El valor 0 significa bucle infinito.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub conserva NETSCAPE2.0 para no alterar el comportamiento de la animación.
XMP Data:Extensible Metadata Platform
Identificador de aplicación: XMP DataXMP. Contiene metadatos XMP/RDF completos en formato XML.
PicScrub elimina las extensiones de aplicación XMP.
Cómo se conserva la animación
Lo complicado del GIF es distinguir entre los datos de la animación (que hay que conservar) y los metadatos (que queremos eliminar). Ambos viven en bloques de extensión, así que no podemos limitarnos a borrarlos todos.
Se conserva para la animación
- • Número de repeticiones de NETSCAPE2.0
- • Extensiones de control gráfico
- • Retardos entre fotogramas
- • Métodos de disposición
- • Índices de transparencia
- • Tablas de color locales
Se elimina
- • Extensiones de comentario
- • Bloques de aplicación XMP
- • Bloques de aplicación desconocidos
- • Extensiones de texto plano
Cómo procesa PicScrub los GIF
Validar la cabecera
Comprobar la firma GIF87a o GIF89a
Copiar los datos de la cabecera
Conservar el LSD y la tabla de color global sin cambios
Filtrar las extensiones
Conservar NETSCAPE2.0 y el control gráfico; eliminar los comentarios y XMP
Conservar los datos de la imagen
Copiar sin cambios todos los descriptores de imagen, las LCT y los datos LZW
Escribir el terminador
Cerrar el archivo con el byte terminador 0x3B
Compresión LZW
Un apunte sobre los datos de imagen del GIF: usan compresión LZW, que estuvo patentada hasta 2004 (con todo el drama que eso provocó en los años 90). PicScrub no toca en absoluto los datos comprimidos: los copia byte a byte, así que no hay ninguna pérdida de calidad.
Por qué esto importa
Al conservar los datos LZW originales, PicScrub garantiza:
- • Cero pérdida de calidad (la imagen se conserva bit a bit)
- • Procesamiento rápido (sin ciclo de descodificación y recodificación)
- • El mismo tamaño para los datos de la imagen
Los límites de los metadatos en GIF
La buena noticia del GIF es que es anterior al estándar EXIF, así que no hay coordenadas GPS ni datos de la cámara de los que preocuparse. Sus problemas de metadatos son más prosaicos.
Qué se puede filtrar
Los riesgos de privacidad del GIF son bastante menores que los del JPEG:
- • Extensiones de comentario (a veces con notas del autor)
- • Metadatos XMP (poco frecuentes, pero posibles)
- • Identificación del software en los bloques de aplicación