Comment convertir du Base64 en WebP
- Collez le Base64 ou l’URI complète
data:image/webp;base64,.... Du code qui en contient une, comme unurl()CSS ou une balise<img>, fonctionne aussi. - Vérifiez que la ligne d’état affiche Détecté WebP, puis regardez l’aperçu et les dimensions au-dessus. Un WebP animé se lit dans l’aperçu.
- Appuyez sur Télécharger le fichier. L’extension est réglée sur
webp.
Trois types de WebP
WebP est un conteneur RIFF avec l’un de trois types de chunk juste après la balise WEBP. Comme la balise se trouve à un offset fixe, le type apparaît aussi à une position fixe dans le Base64 :
| Le Base64 commence par | Chunk | Ce que c’est |
|---|---|---|
UklGR…XRUJQVlA4I | VP8 | avec perte, sans transparence |
UklGR…XRUJQVlA4T | VP8L | sans perte, transparence possible |
UklGR…XRUJQVlA4W | VP8X | étendu : avec perte et alpha, animation, profil ICC ou EXIF |
Les six caractères entre UklGR et XRUJQ encodent la taille du fichier et changent d’un fichier à l’autre. XRUJQ (issu de WEBP) occupe toujours les caractères 12 à 16 et VlA4 (issu de VP8) les caractères 17 à 20. C’est le 21e caractère qui vous intéresse : I, T ou W.
Le type décide de ce qui se passe quand vous convertissez le fichier. Le WebP sans perte remplace bien le PNG. Le WebP avec perte a déjà perdu des détails : le convertir en PNG produit un gros fichier sans rendre la qualité. Un fichier étendu peut contenir plusieurs images ; le convertir dans un format fixe ne garde que la première.
Vérifier le type de WebP dans le code
Le même test en Python lit la balise du chunk et, pour les fichiers étendus, l’octet de drapeaux :
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)
Pour des fichiers WebP écrits par Pillow, la fonction renvoie lossy, lossless, extended, alpha pour une image avec perte et transparence, et extended, animated pour une animation. Plus de détails dans Base64 en Python.
RIFF ne veut pas toujours dire WebP
UklGR signifie seulement « RIFF ». L’audio WAV et la vidéo AVI commencent de la même façon et diffèrent par la balise aux octets 8 à 11. Le décodeur vérifie cette balise : un WAV collé ici est signalé par « Cela ressemble à WAV, pas à un fichier WebP » avec un bouton pour l’enregistrer en .wav. Base64 en audio le lit.
Où l’on croise du WebP en Base64
- Les exports de canvas avec
toDataURL("image/webp", quality). Vérifiez le résultat : les navigateurs sans encodeur WebP renvoient discrètement du PNG. - Les API d’images et les CDN, qui servent du WebP à tout client qui l’accepte. Si un navigateur a récupéré l’image, même un champ nommé
thumbnail_jpgpeut contenir du WebP. - Les placeholders et les icônes intégrés en HTML et en CSS, où le WebP donne une chaîne plus courte que le PNG ou le JPEG.
- Les stickers de messagerie, souvent en WebP, parfois animés.
Quand un programme ancien refuse le fichier enregistré, comparez le SHA-256 affiché ici avec celui du fichier qu’il a reçu. S’ils correspondent, le programme ne lit pas le WebP, et une copie en PNG ou en JPEG est la solution.
FAQ
Mon WebP en Base64 est-il avec ou sans perte ?
Regardez le 21e caractère de la chaîne. Un I après VlA4 désigne une image avec perte VP8 , un T une image sans perte VP8L, et un W le format étendu, qu’utilisent les images avec perte dotées de transparence et les animations.
Puis-je enregistrer le WebP décodé en PNG ou JPG ?
Pas en le renommant : les octets restent du WebP. Téléchargez le .webp, puis utilisez WebP en Base64 avec Convertir en PNG ou JPEG et décodez la nouvelle chaîne sur Base64 en PNG.
Pourquoi canvas.toDataURL('image/webp') m'a-t-il donné un PNG ?
Les navigateurs qui ne savent pas encoder le WebP, Safari en particulier, renvoient sans prévenir une data URI PNG. Collez le résultat ici : s’il indique PNG, c’est ce qui s’est passé.
Pourquoi l'aperçu échoue-t-il sur un Mac ou un iPhone ancien ?
Safari 14 et 15 n’affichent le WebP que sur macOS 11 Big Sur ou plus récent, et Safari avant la version 14 pas du tout. L’aperçu indique alors que le navigateur ne peut pas afficher l’image, mais Télécharger le fichier enregistre quand même un .webp valide.