PicScrub logoPicScrub
Volver a los formatos

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

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 bytes
GIF87a o GIF89a
LSD
7 bytes
Descriptor lógico de pantalla
GCT
768 bytes
Tabla de color global (opcional)
Extensions
100 bytes
Bloques de extensión (metadatos)
Image Data
Longitud variable
Descriptor de imagen + datos LZW
Trailer
1 bytes
Terminador 0x3B

Cabecera GIF

Firma GIF
Versión (89a)
Ancho (640)
Alto (480)
Campos empaquetados
Índice de fondo
Relación de aspecto del píxel
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Diferencias entre versiones

GIF87a

Especificación original. Sin bloques de extensión.

GIF89a

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.

21 F9 04 [disposición] [retardo] [transparencia] 00

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.

21 FE [tamaño] [datos del comentario...] 00

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.

21 FF 0B [identificador de app] [código de autenticación] [datos...] 00

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.

Introductor de la extensión
Tamaño del bloque (11)
NETSCAPE2.0
Tamaño del sub-bloque
ID del sub-bloque
Número de repeticiones
Terminador
OffsetHexASCII
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

1

Validar la cabecera

Comprobar la firma GIF87a o GIF89a

2

Copiar los datos de la cabecera

Conservar el LSD y la tabla de color global sin cambios

3

Filtrar las extensiones

Conservar NETSCAPE2.0 y el control gráfico; eliminar los comentarios y XMP

4

Conservar los datos de la imagen

Copiar sin cambios todos los descriptores de imagen, las LCT y los datos LZW

5

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