Comment convertir du Base64 en ICO
- Collez le Base64, une URI
data:image/x-icon;base64,...ou la balise complète<link rel="icon" href="data:...">. - Vérifiez que la ligne d’état affiche Détecté ICO et regardez l’aperçu.
- Appuyez sur Télécharger le fichier. Le nom par défaut est
decoded.ico; renommez-lefavicons’il est destiné à un site web.
Le champ Type MIME affiche image/x-icon, le type que la plupart des serveurs et des data URI utilisent pour les icônes.
Un fichier ICO contient plusieurs images
Contrairement au PNG ou au JPEG, un fichier ICO est un petit conteneur. Un favicon.ico typique contient des versions 16×16, 32×32 et 48×48, et les icônes d’applications Windows y ajoutent souvent du 256×256. Windows choisit la meilleure taille pour la barre des tâches, un raccourci sur le bureau ou l’Explorateur ; les navigateurs en choisissent une pour l’onglet.
Le fichier commence par un en-tête de 6 octets, suivi d’une entrée de répertoire de 16 octets par image. Le Base64 de tout ICO commence donc par AAABAA, soit les octets 00 00 01 00. Voici Afficher le dump hex pour une icône à trois tailles :
00000000 00 00 01 00 03 00 10 10 00 00 00 00 20 00 56 00 |............ .V.|
00000010 00 00 36 00 00 00 20 20 00 00 00 00 20 00 6b 00 |..6... .... .k.|
00000020 00 00 8c 00 00 00 30 30 00 00 00 00 20 00 8c 00 |......00.... ...|
00000030 00 00 f7 00 00 00 89 50 4e 47 0d 0a 1a 0a 00 00 |.......PNG......|
| Octets | Valeur | Signification |
|---|---|---|
00 00 | 0 | réservé |
01 00 | 1 | type : 1 = icône, 2 = curseur |
03 00 | 3 | nombre d’images |
10 10 | 16, 16 | première image : largeur et hauteur (00 signifierait 256) |
20 00 | 32 | bits par pixel |
56 00 00 00 | 86 | taille des données de l’image en octets |
36 00 00 00 | 54 | début des données de l’image |
Les deux entrées suivantes décrivent du 32×32 (20 20) et du 48×48 (30 30). La première image commence à l’offset 54, et le .PNG dans la colonne de texte montre qu’elle est stockée en PNG.
Du PNG ou du BMP à l’intérieur
Chaque image d’un ICO est stockée soit sous forme de fichier PNG complet, soit sous forme de bitmap sans l’en-tête de fichier BM habituel. Dans le second cas, ses données commencent par 28 00 00 00, et la hauteur indiquée dans cet en-tête de bitmap est doublée, car un masque de transparence de 1 bit suit les pixels de couleur. Les grandes images de 256×256 sont en général en PNG, car un bitmap 32 bits non compressé de cette taille dépasse 256 Ko.
Une chaîne ICO est souvent bien plus longue que ne le laisse penser l’icône, car toutes les tailles y sont et les entrées bitmap ne sont pas compressées. Pour un site web, un simple PNG de 32×32 ou un favicon SVG est en général bien plus petit. Favicon en Base64 explique comment les intégrer.
Lister et extraire les images dans le code
Cette fonction Python lit le répertoire et renvoie chaque image avec sa taille et son format :
import base64, struct
def ico_entries(b64: str):
data = base64.b64decode(b64.split(",", 1)[-1])
reserved, kind, count = struct.unpack_from("<HHH", data, 0)
if reserved != 0 or kind not in (1, 2):
raise ValueError("not an ICO or CUR file")
for i in range(count):
w, h, colors, _, _, bpp, size, offset = struct.unpack_from("<BBBBHHII", data, 6 + 16 * i)
image = data[offset:offset + size]
fmt = "png" if image.startswith(b"\x89PNG") else "bmp"
yield {"size": f"{w or 256}x{h or 256}", "bpp": bpp, "bytes": size, "format": fmt, "data": image}
Pour l’icône ci-dessus, elle renvoie 16x16, 32x32 et 48x48, toutes en png. Écrivez le entry["data"] d’une entrée PNG dans un fichier .png et vous obtenez cette taille sous forme d’image autonome. Les entrées bitmap ont besoin d’un en-tête de fichier et du retrait du masque avant que d’autres logiciels puissent les lire : pour celles-ci, ouvrez l’ICO dans un éditeur d’icônes. Base64 en Python en dit plus sur le décodage.
Quand l’icône refuse de s’ouvrir
- « Cela ressemble à PNG, pas à un fichier ICO ». Beaucoup de chaînes « favicon » sont de simples PNG. Les navigateurs acceptent un favicon PNG sous n’importe quel nom, mais les logiciels qui exigent un vrai fichier d’icône, comme les ressources d’applications Windows, n’acceptent pas un PNG renommé. Utilisez Télécharger en .png et gardez-le en PNG.
- « Votre navigateur ne peut pas afficher les images ICO ». Le navigateur n’a pu dessiner aucune image du fichier, en général parce qu’une entrée est endommagée, tronquée ou utilise un format de bitmap inhabituel. Le téléchargement contient toujours les données exactes ; ouvrez-le dans un éditeur d’icônes pour voir quelle entrée pose problème.
- Le favicon ne change pas dans le navigateur. Les navigateurs gardent les favicons dans un cache à part : vérifiez donc la nouvelle icône dans une fenêtre de navigation privée.
FAQ
Combien de tailles contient mon fichier ICO ?
Ouvrez Afficher le dump hex et lisez les octets 4 et 5 : ils contiennent le nombre d’images en little-endian, 03 00 signifie donc trois images. Chaque image a ensuite une entrée de 16 octets avec sa largeur, sa hauteur et sa position dans le fichier.
Pourquoi l'aperçu ne montre-t-il qu'une seule taille ?
Le navigateur choisit une image de l’icône à dessiner, et la ligne des dimensions indique celle-là. Les autres tailles sont toujours dans le fichier et sont enregistrées avec lui.
Puis-je extraire un seul PNG d'un ICO ?
Oui, si cette entrée est stockée en PNG, ce qui est courant pour les icônes de 256×256. Ses octets forment un fichier PNG complet ; l’extrait Python de cette page enregistre chacun d’eux.
Cela fonctionne-t-il pour les fichiers de curseur Windows ?
Oui. Un fichier .cur utilise le même conteneur avec le type 2 au lieu de 1 : son Base64 commence donc par AAACAA. Il est détecté comme CUR et enregistré avec l’extension .cur.