Por alguna razón, puedes colocar 2 millones de píxeles en una imagen sin utilizar 1,97 megabytes de espacio. Encontré un lindo fondo de pantalla de 1080p (que tiene aproximadamente 2 millones de píxeles) y lo descargué. Al revisar las propiedades, noté algo extraño: solo ocupaba 230 KB de espacio en mi disco duro. ¿Porqué es eso? Para alguien que no entiende muy bien la compresión de imágenes, parece magia. Pero una vez que conozcas el tema, entenderás cómo algunas imágenes son más grandes que otras a pesar de la cantidad de píxeles que ocupan en tu pantalla. El tiempo apremia, así que analicemos rápidamente los principios básicos de la compresión de imágenes.
Métodos, enfoques, algoritmos en abundancia.
Es ingenuo pensar que solo hay una forma de comprimir una imagen. Existen diferentes métodos, cada uno con un enfoque único para un problema común, y cada enfoque se utiliza en diferentes algoritmos para llegar a una conclusión similar. Cada algoritmo está representado por un formato de archivo (PNG, JPG, GIF, etc.). Por ahora, vamos a hablar de los métodos que generalmente se utilizan para comprimir imágenes, lo que explicará por qué algunos de ellos ocupan mucho menos espacio.
Compresión sin perdidas
Cuando piensa en la palabra «sin pérdidas» en el contexto de la compresión de imágenes, probablemente piense en un método que hace todo lo posible por preservar la calidad y al mismo tiempo mantener un tamaño de imagen relativamente pequeño. Eso está muy cerca de la verdad. Como método, la compresión sin pérdidas minimiza la distorsión tanto como sea posible, conservando la claridad de la imagen. Lo hace construyendo un índice de todos los píxeles y agrupando los píxeles del mismo color. Es algo así como funciona la compresión de archivos, excepto que estamos tratando con unidades de datos más pequeñas.
DEFLATE es uno de los algoritmos más comunes para este tipo de trabajo. Se basa en otros dos algoritmos (Huffman y LZ77, si eres un ratón de biblioteca) y tiene una forma muy comprobada de agrupar los datos que se encuentran dentro de las imágenes. En lugar de simplemente ejecutar la longitud de los datos y almacenar varias instancias de un píxel con el mismo color en una sola unidad de datos (lo que se conoce como codificación de longitud de ejecución), toma las cadenas duplicadas que se encuentran dentro del código completo y establece un «puntero». por cada duplicado encontrado. Dondequiera que una cadena particular de datos (píxeles) se use con frecuencia, reemplaza todos esos píxeles con un símbolo ponderado que comprime aún más todo.
Observe cómo con la codificación de longitud de ejecución y DEFLATE, ninguno de los píxeles se come ni se fuerza a cambiar de color. El uso de este método da como resultado puramente una imagen que es idéntica al original sin procesar. ¡La única diferencia entre los dos radica en cuánto espacio ocupa realmente en su disco duro!
Compresión con pérdida
Como su nombre lo indica, la compresión con pérdida hace que una imagen pierda parte de su contenido. Cuando se lleva demasiado lejos, puede hacer que la imagen sea irreconocible. Pero con pérdidas no implica que estés eliminando píxeles. En realidad, hay dos algoritmos comúnmente utilizados para comprimir imágenes de esta manera: codificación de transformación y submuestreo de croma. El primero es más común en imágenes y el segundo en video.
Con la codificación de transformación, los colores de una imagen se promedian utilizando una fórmula matemática especial llamada transformada de coseno discreta. La imagen sufre pérdida de color y puede presentar artefactos (pixelación extraña en puntos aleatorios de la imagen) cuando se usa en exceso. Este algoritmo en particular compensa su torpeza con una gran ventaja: puede dictar cuánta calidad desea conservar con la imagen. Con la compresión sin pérdidas, lo más cerca que puede llegar a manipular la calidad de manera integral es establecer la cantidad de colores que debe tener cada imagen.
El submuestreo de croma adopta otro enfoque. En lugar de promediar pequeños bloques de color, que también pueden afectar el brillo de una imagen, intenta cuidadosamente mantener el mismo brillo en todas las áreas. Esto engaña a tus ojos para que no se den cuenta fácilmente de cualquier disminución en la calidad. En realidad, es excelente para la compresión de animaciones, por lo que se usa más en transmisiones de video. Eso no quiere decir que las imágenes no usen también este algoritmo.
¡Pero espera hay mas! Google también probó un nuevo algoritmo con pérdidas, conocido como WebP. En lugar de promediar la información de color, predice el color de un píxel observando los fragmentos que lo rodean. Los datos que realmente se escriben en la imagen comprimida resultante son la diferencia entre el color predicho y el color real. Al final, muchas de las predicciones serán precisas, lo que dará como resultado un cero. Y en lugar de imprimir un montón de ceros, simplemente los comprime en un símbolo que los representa. Se mejora la precisión de la imagen y la compresión reduce el tamaño de la imagen en un promedio del 25 por ciento en comparación con otros algoritmos con pérdida, según Google.
¡Es hora de preguntas y discusión!
Si es nuevo en el mundo de los archivos de imagen, probablemente encontrará al menos un poco de esta información confusa. Si tiene alguna pregunta, publíquela en los comentarios y haremos todo lo posible para responderla. De lo contrario, le invitamos a discutir esto!