Escolha uma imagem e um dos cinco tamanhos quadrados. Com JavaScript o ícone é gerado neste navegador e nada é enviado; sem JavaScript o formulário envia o arquivo ao servidor. Nos dois casos você baixa um favicon.ico que preserva a transparência e a proporção da origem.
Escolha uma imagem PNG, JPEG, GIF ou WebP, selecione um dos cinco tamanhos quadrados e baixe um favicon.ico para uma aba, um favorito ou um aplicativo instalado. O ícone mantém a forma da origem: uma imagem não quadrada é ajustada, centralizada e preenchida com margens transparentes em vez de ser esticada.
Com JavaScript o arquivo é decodificado neste navegador e o ICO é escrito aqui, então a imagem não é enviada. O formulário continua funcionando sem JavaScript: envia o arquivo ao servidor, que aceita até 200 KB. Os dois caminhos geram o mesmo formato: imagem de 32 bits com sua máscara AND de 1 bit, e a transparência sobrevive.
16 px é o ícone clássico de aba, 32 px é o padrão aqui e cobre abas em telas de alta densidade, 48 px e 64 px são usados por atalhos da área de trabalho, alternadores de tarefas e alguns lançadores Android, e 128 px cobre listagens de loja e blocos de aplicativo. Geramos ICO e não PNG porque atalhos e shells antigos do Windows esperam um contêiner ICO.
Um arquivo carrega uma imagem: um ícone de 32 px tem 4.286 bytes, o de 16 px tem 1.150 bytes e o de 128 px tem 67.646 bytes. O navegador escala a única imagem que encontra, então o tamanho escolhido equilibra nitidez em blocos grandes e bytes em cada carregamento.
Uma imagem quadrada é escalada direto para o tamanho escolhido. Uma imagem não quadrada mantém a proporção: é ajustada ao quadrado, centralizada, e as sobras ficam transparentes, então círculos continuam círculos e logotipos não são deformados.
A transparência é gravada duas vezes: no canal alfa de 32 bits e na máscara AND que leitores antigos ainda usam. Um PNG transparente mantém o fundo transparente em vez de virar preto. Um GIF animado é lido como o primeiro quadro e um JPEG não tem transparência a preservar.
Com JavaScript a imagem não sai do dispositivo: não há envio, não há limite de tamanho e a ferramenta funciona sem conexão. O caminho sem JavaScript envia a imagem ao servidor e aceita até 200 KB (204.800 bytes).
Os dois caminhos recusam imagens maiores que 4096 × 4096 pixels, porque um bitmap maior esgota a memória de uma requisição, e recusam formatos diferentes de PNG, JPEG, GIF e WebP. Ampliar é permitido — uma origem de 4 × 4 gera um arquivo de 128 px —, mas o resultado não ganha detalhe.