El tamaño de los datos (el número de bits necesarios para almacenarlos) afecta al tiempo que se tarda en enviar esos datos a través de Internet. Entonces, la gente usa compresión de datos algoritmos para reducir el tamaño de imágenes, sonidos, películas y algunos otros tipos de datos.
La cantidad de reducción de tamaño depende de dos cosas:
Hay dos grandes categorías de algoritmos de compresión de datos: sin pérdida y con pérdida, dependiendo de si se pierde información.
Los algoritmos de compresión de datos sin pérdida (lossless data compression) (como PNG) son reversibles (no hay pérdida de calidad); puedes reconstruir los datos originales.
La compresión sin pérdida funciona por eliminación de datos redundantes. Estos algoritmos pueden, usualmente, reducir el número de bits necesarios para almacenar o transmitir los datos, garantizando al mismo tiempo que los datos originales se puedan reconstruir perfectamente.
La codificación de longitud de ejecución (run-length encoding en inglés) es un ejemplo de compresión sin pérdida. Fíjate en los 158 píxeles en la fila superior del logo de BJC (a la derecha). Los primeros 60 píxeles son blancos. Luego vienen cinco píxeles de naranja amarillento (la parte superior de la "b"). Y el resto de esa fila es blanca.
......
En lugar de almacenar los 158 píxeles individualmente, podríamos comprimirlos con codificación de longitud de ejecución y solo almacenar seis valores (tres números y tres colores):
pixel count | color code |
---|---|
60 | FFFFFF |
5 | E5A84A |
93 | FFFFFF |
Esos seis valores (60, FFFFFF, 5, E5A84A, 93, FFFFFF) se pueden reconstruir en toda esa primera fila de la imagen (158 píxeles). Por lo tanto, menos bits no significa necesariamente menos información.
Los algoritmos de compresión de datos con pérdida (lossy data compression) no son totalmente reversibles; solo pueden reconstruir una aproximación de los datos originales.
La compresión con pérdida funciona eliminando detalles que son menos perceptibles para las personas. El algoritmo de compresión con pérdida más utilizado para imágenes se llama JPEG (o JPG, ambos pronunciados "llei-peg" para "Joint Photographic Experts Group", el comité que lo inventó). JPEG funciona preservando la mayor parte de la información de brillo para cada píxel (ya que los ojos humanos son sensibles a eso) y realizando una especie de proceso de promedio de la información de color (porque los ojos humanos no son tan buenos para distinguir el color, especialmente los colores cercanos al blanco).
A continuación se muestra una imagen original sin comprimir de guijarros (piedras pequeñas) en un estanque y un JPEG altamente comprimido de la misma imagen. ¿Puedes decir cuál es cuál?
Probablemente puedas decir cuál es cuál, especialmente si buscaste bordes afilados o manchas muy brillantes. Pero el archivo comprimido usa 1/30 del espacio utilizado por el original, e incluso se podría decir que es una imagen de rocas. Por lo tanto, para muchos propósitos, la versión comprimida sería lo suficientemente buena. Los algoritmos con pérdida generalmente te permiten controlar el grado de precisión, y, en general, las personas seleccionan configuraciones de compresión menos extremas, por lo que el archivo comprimido se parece mucho más al original que a este ejemplo.
¿Qué tamaño tiene este archivo cuando se codifica en diferentes formatos?
formato | tamaño |
---|---|
BMP codificando cada píxel individualmente (se muestra arriba) | 148 kB |
PNG | 106 kB |
JPEG con la menor compresión | 94 kB |
JPEG con la mayor compresión (se muestra arriba) | 5 kB |
El formato MP3, que probablemente usas para archivos de música portátiles, es un formato de compresión con pérdida. Tiende a enfatizar las frecuencias altas, por lo que las personas acostumbradas a la música MP3 encuentran que las versiones sin comprimir de la misma música tienen un sonido excesivamente grave (boomy o con mucho énfasis en los graves).
Ambos tipos de compresión de datos existen porque cada uno es útil en ciertas circunstancias: