4.3. Formatos de imagen
4.3.2. ¿Qué son los formatos de imagen? La cuestión de la compresión
Hay dos maneras principales de comprimir: sin pérdida y con pérdida.
Sin pérdida (lossless) significa que la imagen es más pequeña, en el sentido de que ocupa menos bytes, pero no perdemos calidad de imagen. Todos los píxeles que formaban la imagen original están aquí en la nueva versión comprimida.
Con pérdida (lossy) significa que la imagen se ha hecho mucho más pequeña, pero hemos perdido calidad, se ha simplificado la imagen de alguna manera.
Un elemento clave a la hora de considerar la compresión de una imagen es el color. Cuantos más colores tenga una imagen, más memoria ocupará. Así, en los procesos de compresión tenemos dos maneras de codificar los colores, denominadas paletas en el argot informático: color indexado y color directo.
Si usamos una paleta de color indexado, esto quiere decir que solo se registrarán un número determinado de colores (normalmente, 256). El creador de la imagen puede decidir cuáles serán estos 256 colores mediante una herramienta conocida como mapa de colores.
En cambio, el color directo permite utilizar miles de colores sin ninguna necesidad de reducirlos a una lista determinada.
Para entendernos, supongamos que hemos sacado una fotografía de un prado verde. Nuestra cámara tiene muy buena resolución y ha capturado decenas de matices de verde. Esta foto tiene una paleta de color directo.
Queremos subir esta foto a nuestro blog, pero pesa demasiado, ocupa mucha memoria y, por lo tanto, utilizamos un algoritmo de compresión que reduce el tamaño al limitar el número de colores a 256. Así, nuestro prado verde dejará de tener decenas de matices de verde y pasará a tener, por ejemplo, solo cuatro variedades de verde, que pueden generarse automáticamente en el proceso de compresión o que habremos seleccionado al editar el mapa de colores.
Limitar la paleta de colores es una de las estrategias más sencillas y útiles para reducir el tamaño de una imagen. Consideremos una imagen de mapa de bits. Supongamos que cada uno de los cuatro canales RGBA tiene una profundidad de 8 bits. Esto nos da 256 valores diferentes por canal y, por lo tanto, disponemos de más de 16 millones de colores (exactamente, 16.777.216). Si en lugar de usar color directo utilizamos color indexado, y reducimos la paleta a 256 colores, solo necesitaremos 2 bytes por píxel, y así el tamaño original de la imagen se reducirá al 50 % sin tener que perder ninguno de los píxeles originales de la misma.
Esta manera de comprimir la imagen es sin pérdida, puesto que no sacrificamos ninguno de los píxeles originales de la imagen: nos limitamos a reducir el número de colores. Podríamos discutir si la «calidad» de la fotografía ha disminuido al reducir los colores
–está claro que sí–, pero lo que decimos aquí es una cuestión técnica: un sistema de compresión es sin pérdida si no se pierde ningún píxel, ni más ni menos.
Pero quizá nuestra imagen continúa siendo demasiado grande. O la velocidad de carga es crucial. O quizá tiene que aparecer en un dispositivo muy simple con poca memoria y poca velocidad de procesamiento. Por este motivo, hay otras técnicas para reducir más el volumen de una imagen.
No es el objetivo de este texto explicar en detalle estos algoritmos, pero conviene conocer la idea general. Si observamos cualquier fotografía, veremos que los píxeles que son cercanos entre ellos tienden a compartir propiedades. En una foto de una salida de sol en el mar, tendremos una infinidad de píxeles azules uno junto al otro, y un centro de píxeles anaranjados. Con la técnica conocida como codificación delta, podemos indicar qué diferencia hay entre dos píxeles que están uno junto a otro. Si los dos píxeles tienen la misma propiedad, entonces delta es cero, con lo cual podemos representar un píxel con un solo bit. Esta técnica puede optimizarse y no solo enfocarse al píxel vecino, sino ampliar el rango y codificar bloques de píxeles solo con unos cuantos bits.
Otra técnica –que se utiliza ampliamente en audio y vídeo, en los que la compresión es central– es utilizar información de la psicología de la percepción para establecer qué colores puede reconocer una persona como claramente distintos, y cuáles se reciben de manera similar. Con este conocimiento, podemos reducir la paleta de colores y eliminar los matices que no son observables por los humanos.
Los diferentes formatos que describiremos a continuación no son más que el resultado de aplicar distintas técnicas y algoritmos de compresión.