ICO: Formato de Icono de Windows para Escritorio y Web
El formato ICO (Icon) es el contenedor de icono nativo de Windows—un directorio de entradas de imagen, cada una con dimensiones, profundidad de color y compresión independientes. A pesar de ser un formato de los años 80, ICO sigue siendo relevante hoy como estándar de facto de favicon (aunque los navegadores modernos prefieren PNG, SVG y WebP). Entender la estructura ICO es esencial para optimización de favicon, software Windows heredado y bibliotecas de iconos multiplataforma.
Estructura de Archivo ICO: Encabezado de Directorio de Icono
Cada archivo ICO comienza con un encabezado de 6 bytes:
[Reservado: 2 bytes (0x0000)]
[Tipo: 2 bytes (0x0001 = ICO, 0x0002 = CUR)]
[Conteo: 2 bytes (número de imágenes)]
Seguido de un arreglo de entradas de directorio (16 bytes cada una):
[Ancho: 1 byte (0–255; 0 = 256)]
[Alto: 1 byte (0–255; 0 = 256)]
[Conteo Color: 1 byte (0 = color verdadero, >0 = tamaño paleta indexada)]
[Reservado: 1 byte (0x00)]
[Planos Color: 2 bytes (siempre 1 para ICO)]
[Bits Por Píxel: 2 bytes (1, 4, 8, 24, 32)]
[Tamaño: 4 bytes (tamaño datos imagen en bytes)]
[Desplazamiento: 4 bytes (desplazamiento byte a datos imagen)]
Ejemplo: Icono RGBA único de 32×32:
00 00 (reservado)
01 00 (tipo = icono)
01 00 (conteo = 1)
20 20 00 00 01 00 20 00 (32×32, color verdadero, 32-bit)
XX XX XX XX (tamaño datos imagen)
16 00 00 00 (desplazamiento a datos = 22 bytes después encabezado)
Profundidades de Color y Planos de Bits: De 1-Bit a 32-Bit RGBA
ICO soporta múltiples profundidades de color en un único archivo:
| Profundidad | Tipo | Colores | Codificación | Caso de Uso |
|---|---|---|---|---|
| 1-bit | Bilevel (B&N) | 2 (monocromático) | Bits empaquetados (8 px/byte) | Iconos heredados de los 80, símbolos de alto contraste |
| 4-bit | Paleta indexada | 16 | Nibbles empaquetados (2 px/byte) | Iconos software de los 80/90 |
| 8-bit | Paleta indexada | 256 | Indexado + paleta | Iconos software de finales de los 90 |
| 24-bit | RGB sin comprimir | 16.7M | Triplete RGB por píxel | Iconos a color sin transparencia |
| 32-bit | RGBA (estándar moderno) | 16.7M + alfa | Cuádruplo RGBA por píxel | Iconos modernos con alfa por píxel |
Máscaras AND y XOR: Modelo de Transparencia Heredado
Archivos ICO pre-32-bit usan dos máscaras separadas para transparencia:
- Máscara AND: Opaco (0) / Transparente (1) por píxel (1-bit)
- Máscara XOR: Datos imagen visible (1-, 4-, 8- o 24-bit)
Combinadas, producen el icono final usando mezcla XOR con fondo de pantalla—una técnica de la era 8086. Herramientas modernas (Photoshop, ImageMagick) manejan esto automáticamente; comprenderlo es principalmente histórico.
Tamaños de Icono Estándar: Convenciones de Windows
Las convenciones de Windows y web dictan estos tamaños por caso de uso:
| Tamaño | Uso | Profundidades Típicas |
|---|---|---|
| 16×16 | Barra menú, bandeja sistema (heredada) | 4-bit, 8-bit, 32-bit |
| 24×24 | Botones barra herramientas | 24-bit, 32-bit |
| 32×32 | Icono escritorio primario (clásico) | 8-bit, 24-bit, 32-bit |
| 48×48 | Icono escritorio grande | 24-bit, 32-bit |
| 64×64 | Extra-grande (Vista+) | 32-bit |
| 128×128 | DPI alto (moderno) | 32-bit |
| 256×256 | DPI ultra-alto, miniaturas | 32-bit |
Los favicons modernos incluyen múltiples entradas: 16×16, 32×32, 48×48, 256×256 en un único ICO.
ICO Moderno: De Máscaras AND/XOR a PNG Comprimido
ICO tradicional usa datos bitmap sin procesar; herramientas modernas comprimen usando PNG internamente:
[Encabezado Directorio Icono]
[Entradas Directorio Icono]
[Datos Imagen 1 Sin Procesar u Comprimido PNG]
[Datos Imagen 2 Sin Procesar u Comprimido PNG]
...
Windows Vista+ y navegadores modernos soportan entradas ICO comprimidas PNG—mismos datos, pero envueltos en chunks IHDR/IDAT de PNG dentro del contenedor ICO. Esto reduce tamaño archivo en 50–70% (especialmente para iconos con transparencia) manteniendo compatibilidad hacia atrás.
Detección de ejemplo: Si datos imagen comienzan con PNG: 89 50 4E 47... (magia PNG), herramientas cambian a descompresión PNG; si no, bitmap sin procesar.
Implementación de Favicon: De ICO a Estándares Modernos
Enfoque heredado (ICO único):
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
Navegador descarga favicon.ico, extrae tamaño óptimo por DPI de pantalla. Funciona en todas partes pero ineficiente (navegadores cargan ICO completo).
Enfoque moderno (múltiples formatos):
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
Navegadores cargan solo el formato que soportan en resolución requerida. SVG para escalabilidad infinita, PNG para respaldo.
Creación de Archivos ICO: ImageMagick, Python, Herramientas En Línea
ImageMagick (convertir múltiples capas PNG a ICO):
# Imagen única → ICO (ImageMagick auto-dimensiona para favicon)
convert entrada.png -define icon:auto-resize=256,128,96,64,48,32,16 salida.ico
# Tamaños específicos múltiples
convert entrada.png -resize 16x16 -define icon:auto-resize=16 favicon-16.ico
convert entrada.png -resize 32x32 -define icon:auto-resize=32 favicon-32.ico
Python (PIL/Pillow):
from PIL import Image
img = Image.open('logo.png').convert('RGBA')
# Crear ICO con múltiples tamaños
tamaños = [(16, 16), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
img_redimensionada = [img.resize(tamaño, Image.Resampling.LANCZOS) for tamaño in tamaños]
img_redimensionada[0].save('favicon.ico', format='ICO', sizes=tamaños)
Creación de favicon por lotes (ImageMagick):
for tamaño in 16 32 48 64 128 256; do
convert fuente.png -resize ${tamaño}x${tamaño} \
-background none -gravity center \
favicon-${tamaño}x${tamaño}.png
done
convert favicon-16x16.png favicon-32x32.png favicon-48x48.png \
favicon-64x64.png favicon-128x128.png favicon-256x256.png favicon.ico
ICO vs PNG, SVG, ICNS (macOS), Mejores Prácticas de Favicon
| Aspecto | ICO | PNG | SVG | ICNS (macOS) | WebP |
|---|---|---|---|---|---|
| Formato | Directorio binario | Binario raster | Texto XML | Directorio binario | Binario raster |
| Tamaño máx | 256×256 (estándar) | Ilimitado | Ilimitado | 512×512 | Ilimitado |
| Profundidad color | 1–32 bits | 8–16 bits por canal | RGB/HSL/CSS | 8–32 bits | 8–16 bits |
| Transparencia | Sí (alfa o AND/XOR) | Sí (alfa) | Sí (SVG) | Sí (alfa) | Sí (alfa) |
| Múltiples tamaños | Sí (archivo único) | No (archivos separados) | Escalable (archivo único) | Sí (archivo único) | No (archivos separados) |
| Soporte navegador | Excelente (IE5+) | Universal | Bueno (moderno) | Ninguno (solo macOS) | Bueno (moderno) |
| Estándar favicon | Heredado (aún funciona) | Estándar moderno | Estándar futuro | N/A | Creciente |
| Tamaño archivo | 2–10 KB (multi-tamaño) | 1–5 KB por tamaño | <1 KB | 10–50 KB | 1–4 KB por tamaño |
Cuándo Elegir ICO
- Software Windows heredado: Aún el estándar para iconos de aplicación .exe
- Compatibilidad máxima del navegador: Funciona en IE5, navegadores antiguos
- Favicons multi-tamaño: Archivo único contiene 16×16, 32×32, 256×256, etc.
- Bibliotecas de iconos multiplataforma: Windows + respaldo para sistemas heredados
- Evitar ICO si: Web moderno (usar SVG + PNG), macOS (ICNS), crítico rendimiento (PNGs individuales cargan más rápido)
Recomendación moderna: Usar ICO como respaldo; priorizar SVG para escalabilidad infinita y ancho de banda mínimo.
Conversiones relacionadas
Conversiones frecuentes del catálogo: