Todavía nos quedan algunas cosas en el tintero del Google I/O. Una de ellas es el "nuevo" códec de imagen para la Web: WebP (Web - Picture, no se han roto la cabeza con el nombre). Digo "nuevo" porque ya existía de bastante antes, pero no está de más darle un repaso.
Lo primero es entender por qué Google está llevando a cabo este esfuerzo. Tenemos tres códecs o formatos mayoritarios: JPEG, PNG y GIF, que datan del 1991, 1996 y 1987 respectivamente. Han cambiado muchas cosas desde entonces, pero aun así estos códecs siguen sirviendo... más o menos.
JPEG es el más usado no sólo en Internet sino también fuera de él. La mayor ventaja que tiene es su capacidad de compresión, que puede llegar a valores tan altos como 100:1 (una imagen de 100KB almacenada en un archivo de 1KB). Pero claro, esa compresión tan potente tiene sus desventajas: pérdida de calidad. Veremos más adelante por qué ocurre esto, pero estoy seguro que a todos nos suenan los _artefactos_, la distorsión de los JPG.
Después tenemos al formato GIF. Realmente el formato es bastante malo: aunque la compresión no tiene pérdidas, tenemos un problema, y es que sólo podemos representar 256 colores. Para que os hagáis una idea, una pantalla normal representa millones de colores. El resultado es que GIF no es un formato de buena calidad, y de hecho sólo se usa para logos simples y para animaciones (es el único que las permite).
Por último, está PNG. Es un formato sin pérdida y que admite transparencia. El problema es que no alcanza una compresión tan alta como JPEG, así que sólo se usa con imágenes pequeñas y con pocos colores.
Al final, tenemos tres formatos distintos, y cada uno destaca en un campo en el que los demás no tienen nada que hacer: JPEG para archivos pequeños, PNG para alta calidad y transparencia, y GIF para animaciones.
WebP pretende unificar todas esas ventajas en un único archivo. Tiene compresión con pérdidas para reducir el tamaño de archivo, sin pérdidas para mantener la calidad (y aun así resultan archivos más pequeños que en PNG), soporta transparencia y animaciones. El formato definitivo, vamos. ¿Cómo lo logran en Google?
¿Cómo funcionan los códecs de imagen?
Para entender un poco el porqué de la necesidad de WebP, tenemos que ver cómo funcionan los códecs de imagen. Aviso que haré varias simplificaciones para que se entienda mejor.
Antes de nada, recordemos que una imagen no es más que una serie de puntos o píxeles, donde cada posición tiene las cantidades de color rojo, verde y azul que componen el color del píxel.
La compresión de imágenes con pérdida de calidad se basa en dos principios (los más importantes, hay muchos más). El principal es que el ojo humano no es capaz de distinguir muchos cambios ligeros de color. Y el segundo, que es más corto guardar una serie de puntos como una función. Por ejemplo, ¿qué es más corto de guardar, cincuenta puntos de una recta o su función (y = ax + b por si alguno no se acuerda)?
No podemos detectar los pequeños cambios de color, así que, ¿para qué guardarlos?
Parece que lo que he dicho no tiene relación, pero en realidad sí. Decíamos que una imagen no es más que una serie de puntos, así que podemos representar esos puntos en una gráfica, y después construir una función que se aproxime a esos puntos.
Esa función nos sale con muchos picos muy pequeños. Espera, ¿no habíamos dicho que esos cambios tan pequeños no los detecta el ojo? Pues lo tenemos fácil: deshagámonos de esos picos. "Aplanemos" la función. Así será más corta, y la guardaremos más fácilmente. Podéis ver un esquema de lo que ocurre en la siguiente imagen.

En JPEG, esto (más o menos) es lo que se llama el proceso de _cuantización_. La cuestión es, ¿qué pasa si nos pasamos al "aplanar" la función? Que perdemos detalle. Los colores se quedan, literalmente, más planos: perdemos contraste. Cada píxel se parece mucho más al resto, y por eso aparecen los artefactos. Exagerando mucho, esto es lo pasa en una imagen real si nos pasamos de compresión:

A la izquierda, imagen JPEG sin comprimir, a la derecha comprimida demasiado.
Este método es bastante eficiente en cuanto al ratio de compresión de la imagen. Lo malo es lo que comentábamos: es irreversible. Perdemos calidad y no la podemos recuperar.
Por suerte, hay otros algoritmos para reducir el tamaño de imagen sin perder la calidad, que se basan en cambiar la forma de expresar la imagen para que se pueda comprimir mejor.
¿Cómo se comprime mejor una imagen (o cualquier archivo)? Ahorrándonos los datos repetidos. Por ejemplo, en lugar de guardar 20 ceros seguidos, simplemente guardamos dos números: 20 (el número de repeticiones) y 0 (el elemento que se repite). El objetivo de los algoritmos con compresión es encontrar otras formas de expresar la imagen de tal forma que haya el mayor número de datos repetidos posible (el nombre técnico es reducir la entropía de información del archivo).
La técnica principal que usan los códecs PNG y GIF para esto es la siguiente. Cogemos un píxel. Sacamos una predicción de cómo será este píxel en función de los de su alrededor. Por ejemplo, si un píxel está rodeado de píxeles rojos, será rojo también; o si está entre uno rojo y otro amarillo, probablemente será naranja.
El truco está en guardar no el valor del píxel, ni la predicción, sino cuánto se desvía la predicción del píxel real. Como en general no hay muchos cambios bruscos en una imagen, habrá muchas diferencias que sean 0 o pequeñas, así que tendremos bastantes datos repetidos. Además, este proceso es reversible, así que no perdemos calidad.
Como hay varios métodos para predecir el valor de un píxel, el codificador escoge el que mejor predice para cada "bloque" de la imagen (esto es, el que saca las predicciones más exactas y el que deja números más pequeños).
¿En qué mejora WebP lo ya existente?
Y después de esta "introducción", podemos ver qué hace WebP para ser mejor que sus antecesores. Recordemos que reduce en un 25% aproximadamente el peso de los archivos con respecto a PNG y JPEG manteniendo la calidad (esto también depende del codificador que se use).
Frente a PNG, WebP lo mejora por tener un mayor abanico de filtros sin pérdida. El filtro de predicción tiene más modos (cada modo valora de forma distinta los píxeles adyacentes al que queremos calcular su valor teórico), lo que permite un mejor ajuste y por lo tanto se pueden comprimir mejor los datos. Además, hay otros dos filtros adicionales: transformación de color e indexación de colores.
Estos filtros se pueden aplicar al mismo tiempo sobre una imagen, de forma que el formato WebP ofrece una compresión máxima mayor usando técnicas que PNG no permite.
Por otro lado, frente a JPEG, WebP destaca por la posibilidad de añadir los filtros sin pérdida que acabo de comentar. Es cierto que JPEG tiene métodos de compresión sin pérdida, pero no son tan efectivos como los de WebP (y son menos usados).
Otra ventaja de WebP es que incluye métodos de compresión mejorados. Al igual que PNG, usa DEFLATE, pero además añade una caché de los colores más usados. En este sentido es el más avanzado de los cuatro formatos.
¿Y todo eso, para qué?
Bien, una vez que hemos visto la teoría, veamos la práctica. Exploremos las imágenes que Google tiene de muestra para comparar qué ofrece, a nivel de calidad, WebP.
Frente a PNG (galería completa), el cambio es impresionante. La calidad de WebP es del 90%, y la imagen en PNG es unas 4-5 veces más grande que la de WebP. Las diferencias en calidad apenas se notan (yo ya me he dejado los ojos y no he visto prácticamente nada).
Con JPEG (galería completa), las cosas están un poco más dispares. De lejos no hay mucha diferencia, pero si pasamos a ampliar vemos que, mientras que en WebP se notan más los bloques de imagen, en JPEG los artefactos en los bordes son mucho más destacados.
Por ejemplo, en imágenes del cielo, si nos fijamos, WebP se queda un poco atrás al darle un patrón más cuadriculado. Sin embargo, la ausencia de artefactos en los bordes de los objetos le da muchos puntos.
Hay que tener en cuenta que al redimensionar las imágenes se pueden haber introducido nuevas distorsiones (o correciones), así que lo más recomendable para apreciar totalmente las diferencias es ir a las galerías que enlazo con Opera o Chrome y ampliar las imágenes.
Conclusiones
Teniendo en cuenta que WebP está orientado a la web más que nada, que las pérdidas en calidad no son demasiado grandes y que la reducción de tamaño es considerable, parece que es la mejor alternativa. Más aún cuando es la que más características tiene de los tres formatos (transparencia, imagen con y sin pérdidas, animaciones).
El problema es el de siempre: la compatibilidad. Hasta que todos los navegadores lo soporten nativamente WebP no es una alternativa razonable al resto de formatos. Y aún en ese momento su adopción será lenta: el resto de programas de imagen (desde Paint hasta Photoshop) tendrán que soportarlo para que los usuarios empiecen a poder usarlo.
Además, esto no es como SPDY: este cambio no es transparente a los usuarios. No es algo entre desarrolladores web y de navegadores. Entran en juego muchos más actores, incluidos los usuarios normales, a los que habrá que cambiarles el chip de "WebP para imágenes en Internet". Y además habrá que contar con las aplicaciones que manejen algo de imágenes (no sólo las especializadas sino también aplicaciones móviles estilo Instagram o cualquiera que permita guardar/subir imágenes) para que cuenten con WebP como el formato por defecto.
Lo que Google está intentando hacer es muy loable, pero le va a costar muchos años plantear WebP como el estándar de imágenes por Internet.
Más información | Especificación de WebP
Ver 39 comentarios
39 comentarios
mariovials
Que buen artículo!
lesan
El problema de WEBP es le mismo que el de VP8/VP9. Y es que en vez de usar algoritmos para mejorar una reducción con poca perdida, lo que hace es arreglar todo añadiendo un filtrado al orginal y así poder comprimir mejor. En todas las fotos, estas y otras, las imagenes de webp salen siempre "refiltradas" y modificando las imagenes aplanando los colores.
Hace tiempo Darkshikari, programador de x264, hizo una comparación de que pasaría si se usase los algoritmos de H264 en imagen. El resultado es que barre literalmente a webp. El que quiera ver los resultados, que siguen siendo similares ahora:http://x264dev.multimedia.cx/archives/541
juandarke
Me gustaría que el cambio a este formato fuese lo más rápido posible porque son todo ventajas.
Por cierto creo que hay PNGs con animaciones.
http://www.bradfordsherrill.com/images/animated.png
varolagos
GIF no es el unico que sorpota animaciones, PNG también lo hace, incluso en la Google IO hablaron del PNG y GIF animado.
dudukiller92
¡¡Me ha encantado este artículo!!
Admito que son bastante complicados de hacer, pero la verdad es que da gusto leerlos.
ekz4
Qué buen artículo! Así da gusto visitar blogs de tecnología
evercpp
La compresión de imagen es un tema que me fascina y lo que han hecho con wewp hasta ahora es genial, y no dudo que lo seguirán mejorando. Espero que más pronto que tarde sea un estandar al igual que su hermano para video, webm.
R
Esto que recuerda a JPEG 2000, que tambien tuvo como ventajas mayor compresion e igual calidad, pero que nunca pudo hacerse popular.
Lo mismo pasa con webp, aunque lo use Facebook o instagram, su uso será mínimo
k4x30x
totalmente brillante el webp espero pronto sea propagado
acerswap
Muy bueno el apartado sobre como funciona la compresion de imagenes. Seria genial si hicierais una seccion semanal explicando conceptos y funcionamiento de la compresion de archivos, como funciona un codec, como nos localiza google maps y otros aspectos tecnicos en palabras simples.
Usuario desactivado
Está claro que el único rival de WebP es él mismo. Por características y comodidad barre a sus tres rivales, ya que unifica lo bueno de cada uno manteniendo la calidad y en la mayoría de casos reduciendo el tamaño.
Es algo que tenía que llegar algún día, un formato potente que evitase tener que jugar a 3 bandas, como hasta ahora. Solamente queda la barrera de la adopción, sobre todo la de los usuarios, y eso ya es trabajo de "los grandes", que deben soportar y promocionar este formato para que los usuarios más básicos no tengan quebraderos de cabeza y, con el tiempo, ganemos todos :)
neosepia
Opino que hay algunos tecnicismo y conclusiones sobre los estándares que no me acaba de convencer como lo describís.
Aún así, gran artículo!
jazei
te has olvidado de la imagenes bitmap.bmp que no tienen compresion pero son de alta calidad pero por suerte poco usado.
por lo que se ve las fotos.jpg siguen ganando y estaran por mucho tiempo mas...
el corel photo paint hace un trabajo muy bueno dando alta caliadad con compresion normal
matdiag
Lo mejor de este formato es lo que destacas aquí: "Al final, tenemos tres formatos distintos, y cada uno destaca en un campo en el que los demás no tienen nada que hacer: JPEG para archivos pequeños, PNG para alta calidad y transparencia, y GIF para animaciones."
Normalmente en web se usa PNG por el canal alfa, pero suele acabar con imágenes de gran tamaño. Esto lo hace un formato ideal, al poder elegir el nivel de su compresión, y se podrán hacer imágenes animadas con mayor calidad que los GIF actuales. Así que para diseño web en especial, tendremos un formato para todo.
juanolo2001
No considero que merezca la pena tanto esfuerzo para lo que ofrece. Al final variando la compresión de un JPG se puede conseguir practicamente el mismo resultado y webp es mejor en unas cosas pero empeora otras entonces si no son todo ventajas para que cambiar?
Si es verdad que al final sale ganando pero no por ser mejor si no por juntar transparencia, animación y compresion, pero si esto va dedicado a webs... ¿significa que hay que sacrificar la visualizacion de una web en TODOS los anteriores navegadores hasta la actualidad? ¿Se tendran que meter librerias js para conseguir compatibilidades?
Mucho ruido y pocas nueces. En video si lo veo importante, en imagen, para ahorrar unos pocos kbs no lo veo tan importante para sacrificar el resto, ni en una web con millones de visitas.
jazei
les queria avisar que opera turbo muestra las fotos en este nuevo formato y la verdad que comprime mucho ahorra muchos bytes mostrando ftos en este formato webp estoy sorprendido de lo que ahorra... el turbo de opera comprime mas que el turbo de yandex que no usa webp
estigliano
También hay que recordar que las comparaciones hechas sobre webp vs jpeg, no tienen el mismo peso final. el cielo que sale cuadriculado por ejemplo, dudo mucho que suceda lo mismo si en ese caso se empareja al jpeg en su peso. En todo caso, hay imágenes que requerirán valores por lo menos idénticos que los necesarios en jpeg para no mostrar fallos visibles.
brunodilorenzo
Muy buen artículo.
Pequeña corrección: donde dice "... color y indexación de..." debería decir "... color e indexación de..."
pikilon
Hay una cosa mucho más interesante que se te ha olvidado comentar.
El uso de "capas" para hacer sprites es vital.
Cuando eres un buen maquetador web sabes que cada llamada a servidor (cada petición imagen, cada js, cada css) es de lo que más ralentiza (a veces más que incluso el peso del archivo). Es decir que 5 imágenes de 1Kb tardan mucho más en cargar y consumen más recursos del servidor que 1 imagen de 5Kb.
Puedes hacer sprites para cosas aisladas pero cuando es un fondo que se repite tienes que cascarle un archivo nuevo.
Webp no es que tenga capas (lo que estaría genial para estas cosas) pero tiene una característica de "zonas" que permite recortar a una sección de la imagen. (menos da una piedra)
Más info en youtube(no puedo poner enlaces, parece que tengo que hacer un poco
de Earl's list para conseguir karma)
ID de youtube = 30_AIEhar-I
id hasta = 1906 segundos
Buen artículo, un saludo
pikilon
ah otra cosa interesante.
Picasa viewer no soporta este formato. ¿Apostamos a que se elimina el programa en breve?
fedeo
Sin duda la mejor explicación sobre el funcinamiento de la compresión de imágenes. Por cierto, muchos de estos principios también son aplicables a otros campos, como el sonido.
R
Esto que recuerda a JPEG 2000, que tambien tuvo como ventajas mayor compresion e igual calidad, pero que nunca pudo hacerse popular.
Lo mismo pasa con webp, aunque lo use Facebook o instagram, su uso será mínimo
sergio_alonso
A la inmensa mayoría de usuarios no le aporta nada el webp.