El formato JPG
JPG, o JPEG, es uno de los formatos de imagen más utilizados, sobre todo a nivel web. Existen varios tipos de JPEG. Sin embargo, uno de ellos es el más empleado con mucha diferencia.
El formato jpegque todos conocemos emplea un algoritmo de compresión con pérdida del mismo nombre. Antes de guardar el fichero, el algoritmo JPEG realiza una serie de operaciones sobre la imagen de termina en una pérdida de calidad, y un tamaño de archivo mucho más pequeño. En función de los parámetros que se establezcan para el algoritmo, esta pérdida de calidad será mayor o menor. Cada vez que abres una imagen en un editor y la vuelves a guardar como jpg, hayas hecho cambios o no, el algoritmo de compresión se aplica nuevamente, incrementando la pérdida de calidad sobre la imagen.
Voy a intentar describir de manera somera, porque tampoco es que sea un experto en la materia, cuáles son estas operaciones y qué hacen con la imagen para conseguir la compresión. Conociendo esto, podremos decidir mejor qué parámetros ajustar.
Paso 1: Cambio de espacio de color de RGB a Y’CrCb
El ojo humano es más sensible a las variaciones de luminosidad que a las de color. Por esto, lo primero que hace el algoritmo es transformar el espacio de color desde RGB (óptimo para las pantallas) a Y’CrCb. De esta manera, se separa una señal de luminancia y dos componentes de crominancia. Permite, así, almacenar con diferente calidad la información de luminosidad y la de color.
Este método optimiza el tamaño final de la imagen y es mayormente empleado en la transmisión de señales de televisión . En estos casos se reserva mayor capacidad de transmisión para la capa de luminancia que para la de crominancia. Permite tener una especie de base de luminancia en calidad mayor, y «pintarla» con capas de crominancia, de una calidad inferior, sin que la imagen final, difiera demasiado de la original.
Traducido a un fichero, nos va a permitir sacrificar información de color y de luminosidad de manera diferenciada, consiguiendo un archivo más pequeño.
Paso 2: Submuestreo del color
Cada vez que creo haber entendido este concepto descubro que no me he enterado de nada la vez anterior. Sin embargo, de manera general es bastante sencillo de entender.
Según el tipo de submuestreo, va a eliminar información de color de algunos píxeles igualándolos entre ellos. Podríamos llamarle «La ley del píxel gordo». Al mezclarse con la capa de luminosidad, estos píxeles gordos, se camuflan pasando desapercibidos a la vista.
Los números del submuestreo indican la proporción de píxeles de color en relación a los píxeles de luminancia. Así, un submuestreo 4:4:4 indica que por cada píxel de luminancia corresponde uno de crominancia. Esto consigue la mejor calidad, pero no reduce el tamaño. Otros valores de submuestreo pueden ser 4:2:2, 4:2:1, 4:1:1… Haciendo que la proporción entre los píxeles de luminancia y los de crominancia cambien. ¿Cómo? Pues esto es lo que aún no tengo del todo claro. Así que no voy a hacerte perder tiempo en una explicación a medias y, en su lugar te dejo el siguiente vídeo donde se explica qué es el submuestreo.
Paso 3: Transformada discreta del coseno (DCT)
Hasta donde he podido entender, y esto no quiere decir que lo haya entendido bien, esto hace algo parecido a lo del píxel gordo pero en la capa de luminancia. En este caso, no va a saco sino que analiza luminancias muy parecidas y las aúna.
Todas estas operaciones, cuando se realizan una, dos o tres veces, no implican demasiada pérdida de calidad pero, evidentemene, los puntos gordos, cada vez son más gordos, las diferencias entre luminancias, cada vez más acentuadas. Lo que acaba provocando la aparición de los cuadraditos del jpeg y acentuación de los artefactos.
JPEG Baseline y JPEG Progresivo
A veces cargamos una web y vemos como una imagen va cargando poco a poco, como si fuese un telón bajando. Esto es porque se va pintando a medida que se descarga. Este tipo de imagen se llama jpeg baseline. A veces podría ser interesante pero, en general es un efecto que pretendemos evitar.
JPEG puede guardar las imágenes en formato progresivo. Envía una serie de versiones de la imagen en una resolución más baja de manera que en la web se muestra la imagen a tamaño completo pero en baja resolución desde un principio. En unos instantes la imagen adquiere la calidad suficiente para ser satisfactoria para el visitante. Con conexiones lentas, todos agradecemos poder ver un “contenido mínimo” lo antes posible.
Si no, me he explicado muy bien, puedes ver la diferencia entre baseline y progresivo con gatitos aquí.
Cuándo es bueno emplear JPEG
Personalmente creo que JPEG es excelente para fotografías, gradientes… imágenes que tienen muchas variaciones de color en las que la precisión, tanto en las líneas como en el color, no sea lo más importante.
En general, no usaría JPEG para logotipos, iconos, emblemas… o cualquier tipo de imagen que requiera precisión en formas, en color y limpieza dado que las operaciones que realiza en la compresión son muy dadas a crear los artefactos que destacan mucho sobre colores planos. En este caso, creo que la elección ideal es el formato PNG.