Como incorporar vários tamanhos em um arquivo .ico?

16

Eu já vi ícones .ico que têm imagens diferentes para vários tamanhos, por exemplo. 16x16, 32x32, 48x48, 128x128, 256x256. No Windows, como posso criar um arquivo de ícone que suporte vários tamanhos dessa maneira, considerando que tenho arquivos .ico existentes para cada tamanho? Observe que espero fazer isso com mais de 200 arquivos, portanto, fazê-lo no cmd seria o ideal.

Suchipi
fonte

Respostas:

28

O ImageMagick (Windows / Mac / Linux) contém uma ferramenta de linha de comando chamada convertque pode ser usada para muitas coisas, incluindo a compactação de várias imagens em um ícone:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

O comando anterior obtém 5 imagens PNG e as combina em um único arquivo .ico.

Diferentemente das outras respostas, esse método pode ser facilmente usado em scripts em lote para gerar automaticamente vários arquivos de ícone. Em um dos meus projetos, tenho uma única imagem vetorial (SVG) e uso o Inkscape para gerar pngs de vários tamanhos, seguidos por convertcriar um contêiner de ícones. Este é um exemplo reduzido (em um script bash):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
Rob W
fonte
1
Cara, sinto que aprendo uma nova maneira de usar o ImageMagick convertsempre que olho para ele. Obrigado pela resposta!
precisa saber é o seguinte
Como você faz o oposto? Converter um .icoem vários PNGs, com base nos tamanhos que ele contém?
Flimm
2
O @Flimm convert favicon.ico favicon.pnggera favicon-0.png, favicon-1.pngetc. para cada ícone no quadro. Se você deseja conhecer as dimensões da imagem, use o identifycomando no arquivo png.
Rob W
Você pode usar imagemagicks próprio convert <icon.png> -resize 64x64em vez de inkscape
kumarharsh
Eu adicionei -dither Nonepara o comando de conversão porque a conversão padrão para 256 cores adicionado algum ruído ao meu ícone
James Roth
7

Melhor comando para o ImageMagick:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

fonte
1
Esta é uma ótima resposta, na verdade. Utilize este comando para teste que o arquivo tenha realmente convertido:identify out.ico
kumarharsh
5

Você pode fazer isso de graça no GIMP . Há breves instruções para fazer isso aqui .

Citar:

  1. Abra sua imagem no Gimp
  2. Faça sua tela quadrada
  3. Redimensione sua camada para a imagem
  4. Dimensione a camada para o maior tamanho do seu arquivo .ico como 64 pixels
  5. Duplicar a camada
  6. Escale a camada duplicada para o próximo tamanho
  7. Continue duplicando / dimensionando todos os tamanhos que você deseja no seu arquivo .ico
  8. Salvar como .ico

No seu caso, você pode começar com a maior imagem e diminuir a escala para cada imagem duplicada ou simplesmente adicionar novas camadas e importar as imagens de ícones específicas desejadas para essa camada.

techturtle
fonte
Como você suporta várias profundidades de cores por esse método?
Random832
Não posso dizer que tive que fazer isso pessoalmente, mas este post diz que o GIMP deve exibir uma caixa de diálogo de configurações de cores para cada camada ao salvar.
Techturtle 22/10/12
Você tem que optar por exportar no Gimp 2.8.16, mas anos depois, posso confirmar que há uma caixa de diálogo para configurações de cores quando você exporta o ico.
Broots Waymb
1

Aqui está a resposta aceita por Rob W , com uma adaptação trivial para evitar a necessidade de digitar os tamanhos (16, 32, etc.) mais de uma vez:

#!/bin/bash
files=()
for size in 16 32 48 128 256; do
    inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
    files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink  "${files[@]}"

Aqui logo.svgrepresenta a imagem de entrada (fonte), a partir do qual podemos criar arquivos menores dos tamanhos desejados ( 16.png, 32.png, etc.) que, em seguida, combinam para o arquivo de ícone de saída (resultado), favicon.ico. Você pode alterar a lista de tamanhos na linha 3, por exemplo, para "16 24 32 48 64 72 128", e o convertcomando se adaptará automaticamente de acordo, pois esse script usa a técnica descrita por G-Man em sua resposta aqui para criar um matriz de nomes de arquivos. E finalmente desvinculamos (removemos) os arquivos PNG criados na linha 4, usando a matriz de nomes de arquivos novamente.


Eu notei que o comando:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(equivalente à apresentada na resposta do usuário400747 ), na verdade, a imagem de bitmap em escala (qualidade perdida) e a transparência perdida das camadas em segundo plano.

Andris Petrams
fonte
1
(1) Você essencialmente copiou a resposta de outra pessoa. Se você fez isso e nada mais (sim, às vezes as pessoas fazem isso), sinalizaria sua resposta para exclusão. Não estou fazendo isso, porque você fez uma pequena melhoria. Porém, sempre que copiar o trabalho de outra pessoa, você deve reconhecer o autor original pelo nome e vincular às informações que está citando. (2) Por favor, não diga coisas como “isso é mais flexível” sem explicar o que você quer dizer. ... (continua)
Scott
(Continua)… (3) Você deve sempre citar variáveis ​​do shell, a menos que tenha um bom motivo para não fazê-lo , e tem certeza de que sabe o que está fazendo. Na verdade, de todos os exemplos que eu vi de scripts que usam variáveis ​​de shell sem citá-las, o seu (por exemplo, o de Rob W ) pode estar entre os menos ruins. Mas, ainda assim, é melhor citar as variáveis. (4) Por que você usa em unlinkvez dos mais comuns rm?
Scott
1

Arquivo em lote do Windows, que cria .PNGs de vários tamanhos e os mescla em um arquivo .ICO:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

Se você não precisar dos arquivos .PNG, poderá excluí-los (ou removê-los) del FILEou salvar todos os PNGs dentro de um diretório que poderá remover (depois %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Espero que ajude alguém. :)

Froschkoenig84
fonte
0

É minha opinião que Axialis IconMaker é a melhor solução para problemas com ícones. Há uma avaliação de 30 dias que provavelmente resolverá o problema para você.

Eu uso o Axialis há muitos anos e em tantos projetos, posso atestar que é um produto realmente útil. Você não precisará de 30 dias! Ha!

Jerry Nixon
fonte
0

Você deve usar um programa de edição de ícones de terceiros porque o MSPaint oferece suporte apenas a um único ícone por arquivo. Há um par de tópicos aqui com recomendações para editores ícone, alguns gratuitos, alguns comercial.

Depois de escolher um editor de ícones, o método de adicionar formatos de ícones varia, mas geralmente é semelhante (você clica em um botão ou seleciona um item de menu para adicionar um novo formato). A maioria dos programas permite importar um arquivo de ícone ao adicionar um formato / tamanho de ícone, mas a maioria também permite criar um novo formato / tamanho a partir do existente, redimensionando-o.

Se você optar por usar a opção criar a partir da inclusão ao adicionar um novo formato / tamanho, crie-os a partir do maior formato de ícone já disponível, pois terá mais dados para o algoritmo de redimensionamento trabalhar com . Além disso, certifique-se de usar uma versão com transparência ao criar um ícone do XP / Vista, pois a maioria dos programas não é boa em criar o canal alfa do zero.

Synetech
fonte
Eu preciso fazer isso com mais de 200 ícones. Algum desses editores de ícones pode executar coisas em lote?
Suchipi
1
Não me lembro de ter visto um editor de ícones com o modo em lote. Você pode tentar usar um editor de imagens no modo em lote, mas não tenho certeza se algum editor de imagem tem suporte para ícones em vários formatos (pelo menos não na linha de comando / modo em lote). Se houver, seria o ImageMagick. Além disso, você deve adicionar o requisito de volume e modo de lote à pergunta.
22412 Synetech
0

Você pode tentar o png2ico de Matthias Benkmann . É gratuito e pode compactar png de vários tamanhos em um único arquivo ico.

Dimitri C.
fonte
Porém, Width must be multiple of 8 and <256. Height must be <256.
existem