Cómo convertir Base64 a WebP
- Pega el Base64 o la URI completa
data:image/webp;base64,.... También sirve código que la contenga, como unurl()de CSS o una etiqueta<img>. - Comprueba que la línea de estado diga Detectado WebP y mira la vista previa y las dimensiones que aparecen encima. Los WebP animados se reproducen en la vista previa.
- Pulsa Descargar archivo. La extensión ya viene puesta como
webp.
Tres tipos de WebP
WebP es un contenedor RIFF con uno de tres tipos de chunk justo después de la etiqueta WEBP. Como la etiqueta está en un desplazamiento fijo, el tipo también aparece en un lugar fijo del Base64:
| El Base64 empieza por | Chunk | Qué es |
|---|---|---|
UklGR…XRUJQVlA4I | VP8 | con pérdida, sin transparencia |
UklGR…XRUJQVlA4T | VP8L | sin pérdida, puede incluir transparencia |
UklGR…XRUJQVlA4W | VP8X | extendido: con pérdida y canal alfa, animación, perfil ICC o EXIF |
Los seis caracteres entre UklGR y XRUJQ codifican el tamaño del archivo y cambian de un archivo a otro. XRUJQ (de WEBP) siempre ocupa los caracteres 12 a 16 y VlA4 (de VP8) los caracteres 17 a 20. El carácter 21 es el que te interesa: I, T o W.
El tipo decide qué pasa cuando conviertes el archivo. Un WebP sin pérdida sustituye bien a un PNG. Un WebP con pérdida ya ha perdido detalle, así que convertirlo a PNG da un archivo grande sin recuperar calidad. Un archivo extendido puede contener varios fotogramas; al convertirlo a un formato estático solo se conserva el primero.
Comprobar el tipo de WebP desde código
La misma prueba en Python lee la etiqueta del chunk y, en los archivos extendidos, el byte de flags:
import base64
def webp_kind(b64: str) -> str:
data = base64.b64decode(b64.split(",", 1)[-1])
if data[:4] != b"RIFF" or data[8:12] != b"WEBP":
return "not WebP"
chunk = data[12:16]
if chunk == b"VP8 ":
return "lossy"
if chunk == b"VP8L":
return "lossless"
flags = data[20]
parts = ["extended"]
if flags & 0x10:
parts.append("alpha")
if flags & 0x02:
parts.append("animated")
return ", ".join(parts)
Con archivos WebP escritos por Pillow devuelve lossy, lossless, extended, alpha para una imagen con pérdida y transparencia, y extended, animated para una animación. Más en Base64 en Python.
RIFF no siempre es WebP
UklGR solo significa “RIFF”. El audio WAV y el vídeo AVI empiezan igual y se distinguen por la etiqueta de los bytes 8 a 11. El decodificador comprueba esa etiqueta, así que un WAV pegado aquí aparece como “Esto parece WAV, no WebP”, con un botón para guardarlo como .wav. Base64 a audio lo reproduce.
Dónde aparece el Base64 de WebP
- Exportaciones de canvas con
toDataURL("image/webp", quality). Comprueba el resultado: los navegadores sin codificador WebP devuelven PNG sin avisar. - API de imágenes y CDN que sirven WebP a cualquier cliente que lo acepte. Si la imagen la descargó un navegador, incluso un campo llamado
thumbnail_jpgpuede contener WebP. - Marcadores de posición e iconos en línea en HTML y CSS, donde WebP da una cadena más corta que PNG o JPEG.
- Stickers de chat, que a menudo son WebP, a veces animados.
Si un programa antiguo rechaza el archivo guardado, compara el SHA-256 que se muestra aquí con el del archivo que recibió. Si coinciden, el programa no lee WebP, y la salida es una copia en PNG o JPEG.
Preguntas frecuentes
¿Mi WebP en Base64 es con pérdida o sin pérdida?
Mira el carácter 21 de la cadena. Una I después de VlA4 indica una imagen VP8 con pérdida, una T una imagen VP8L sin pérdida, y una W el formato extendido, que usan las imágenes con pérdida y transparencia y las animaciones.
¿Puedo guardar el WebP decodificado como PNG o JPG?
No basta con cambiarle el nombre; los bytes siguen siendo WebP. Descarga el .webp, pásalo por WebP a Base64 con Convertir a PNG o JPEG y decodifica la nueva cadena en Base64 a PNG.
¿Por qué canvas.toDataURL('image/webp') me devolvió un PNG?
Los navegadores que no saben codificar WebP, Safari en particular, devuelven en silencio una data URI PNG. Pega el resultado aquí: si dice PNG, eso es lo que pasó.
¿Por qué falla la vista previa en un Mac o iPhone antiguo?
Safari 14 y 15 solo muestran WebP en macOS 11 Big Sur o posterior, y Safari anterior a la 14 no lo muestra en absoluto. En esos casos la vista previa indica que el navegador no puede mostrar la imagen, pero Descargar archivo sigue guardando un .webp válido.