Como converter um SVG quadrado para ICO de tamanho normal?


24

Eu desenhei um ícone no InkScape e gostaria de exportá-lo para um arquivo ICO que incluísse sprites para todas as resoluções razoáveis ​​(16x16, 32x32, ... 256x256 etc). Como isso pode ser feito (sem o uso de softwares enormes e caros, como Photoshop, CorelDraw etc.)?


2
Uma pesquisa rápida me diz que não há como exportar nem uma única ICO do InkScape, mas há muitas sugestões sobre como fazê-lo com software adicional grátis, como o GIMP. Você checou essas opções? Se eles não funcionaram para você, você pode dizer por que não?
usr2564301

@RadLexus, o que eu tentei é uma série de ferramentas on-line e todas elas, até onde eu pude entender, significam criar ICOns de tamanho único.
Ivan Ivan

5
Então, você quer saber como criar ICOs de vários tamanhos? Tente as opções nesta resposta de estouro de pilha: stackoverflow.com/questions/4354617/… (novamente encontrado por uma simples consulta do Google ...).
precisa saber é o seguinte

11
Existe uma extensão do Inkscape que parece exportar como arquivo ico , mas não tenho tempo no momento para tentar se funciona.
Paolo Gibellini

Se você encontrou algum dos itens abaixo para responder sua pergunta, marque-o como a resposta aceita.
D 31Vᴀᴅᴇʀ

Respostas:


24

Você pode usar o ImageMagick imediatamente:

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
Por que essa densidade?
precisa saber é o seguinte

11
Não sei, apenas copiei isso de outro lugar.
precisa saber é o seguinte

@ naught101 aqui está a documentação para o sinalizador de densidade - embora pareça ser uma etapa desnecessária, a menos que você esteja fazendo algo muito específico com tamanhos de imagem, dpi e a rasterização intermediária da imagem. imagemagick.org/script/command-line-options.php#density
CreationTribe

7
Use convert -background none icon.svg -define icon:auto-resize icon.icopara manter o fundo transparente.
Robert Hume

2
magick convert -background none icon.svg -define icon:auto-resize icon.icotrabalhou para mim.
intotecho 6/06

15

Uma solução de linha de comando:

1) Exporte seu SVG para PNG com InkScape

2) Redimensione esta imagem PNG para os tamanhos desejados com o ImageMagick:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3) Converta as imagens PNG em ICO:

magick convert 16.png 32.png 48.png icon.ico

4) Verifique se o seu ICO contém tudo:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000

Você também pode usar um simples lote ou arquivo de shell para simplificar o trabalho.
Paolo Gibellini

3
Não seria melhor (mesmo que um pouco mais complicado) exportar os vários tamanhos de png diretamente do SVG, em vez de redimensionar os PNGs já rasterizados?
heltonbiker

11
Apenas no caso de alguém mais estar curioso, o "..." não é literal. Ele representa outros tamanhos de arquivo png para compactar no arquivo favicon.ico.
Nostalg.io 14/09/18

@ Nostalg.io Boa observação, obrigado! Eu editei a resposta.
Philippe_b

5

Versão Bash ...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

Uso: ./favicon.sh your-square-svg-file.svg

Requer: inkscape imagemagick optipng (opcional) do seu gerenciador de pacotes.

Achei mais fácil recriar isso para o shell bash, pois o Win10 e o Inkscape não estavam se dando bem. Isso foi testado no Windows Subsystem para Linux, mas também deve funcionar no Mac.

Usei esta referência para escolher os tamanhos que me interessavam: https://github.com/audreyr/favicon-cheat-sheet . Ajuste a sizematriz para suas necessidades específicas.


4

Eu sugeriria esta abordagem:

1) crie um script para exportar o SVG para qualquer tamanho necessário. Codifiquei esse script .bat para me ajudar a criar um ícone do Android

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

NOTA :

  • o % inkscape% var definido deve ser adequado ao seu caminho de instalação do Inkscape
  • o script faz eco de todos os comandos de exportação para um arquivo temporário para um melhor gerenciamento do processo do inkscape. O parâmetro "shell" cli aceita mais comandos usando uma única instância em vez de gerar uma instância por comando.

Com esse parâmetro, o Inkscape entra em um modo de shell de linha de comando interativo. Nesse modo, você digita comandos no prompt e o Inkscape os executa, sem precisar executar uma nova cópia do Inkscape para cada comando. Esse recurso é útil principalmente para scripts e usos de servidor: ele não adiciona novos recursos, mas permite melhorar os requisitos de velocidade e memória de qualquer script que chame repetidamente o Inkscape para executar tarefas de linha de comando (como exportação ou conversões). Cada comando no modo shell deve ser uma linha de comando completa válida do Inkscape, mas sem o nome do programa Inkscape, por exemplo "file.svg --export-pdf = file.pdf". ( consulte o manual do inkscape )

2) Adicione ao script acima a sintaxe de conversão indicada na resposta philippe-b, que mescla todos os PNGs gerados em um único arquivo ICO

3) Opcionalmente, remova todos os PNGs exportados, pois não são mais necessários


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.