Eu tenho vários ícones SVG que gostaria de usar para que meu aplicativo seja desenvolvido no VB.Net 2010 e, como ele não tem suporte para lidar com ícones SVG, preciso convertê-los em PNG ou ICO, de preferência. resolução de saída. Eu encontrei essa ferramenta de linha de comando para o Ubuntu chamada rsvgconvert
. Também temos alguma ferramenta para Windows?
command-line
conversion
icons
svg
Kushal
fonte
fonte
apt install imagemagick
O ImageMagick não deve se associar imediatamente a qualquer tarefa em lote que envolva imagens. Especialmente neste caso em que o ImageMagick é uma solução ruim para a conversão de SVG.
Melhor tentar o Inkscape na linha de comando:
inkscape in.svg --export-png=out.png
fonte
-z
opçãoA linha de comando não funcionou imediatamente, e eu queria que 100 arquivos fossem convertidos. Aqui está como eu fiz funcionar com o Windows 7:
instale o inkscape - não o portátil!
copie todos os seus arquivos svg em uma pasta, por exemplo, "C: \ svgs \":
você cria um
convert.bat
arquivo com esta linha dentro:(aponte para a pasta correta da sua instalação):
abra o CMD como administrador! Para fazer isso, pressione a tecla WIN, digite cmd, clique com o botão direito do mouse em "cmd.exe" e selecione "Executar como administrador".
navegue até o seu "C: \ svgs \" e digite
convert.bat
- Todos os arquivos svg serão convertidos para PNGs.Use o Windows Explorer para procurar os arquivos PNG convertidos. No meu PC eles estavam na pasta:
C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs
Espero que ajude.
Como a resolução da linha de comando só podia ser definida como fixa, tanto quanto eu podia ver, acabei usando a ferramenta InkscapeBatch . Lá eu poderia definir o DPI para aumentar todas as imagens relativamente.
Você precisa especificar as configurações corretas ou elas não funcionarão. Aqui está o que eu fiz:
Depois de clicar em "Concluir", você precisa pressionar o botão "Iniciar conversor de lotes ..." na barra de ferramentas:
fonte
%%A
(como um nome de arquivo de entrada). Além disso, por que você acha que ele deve funcionar apenas no modo de administrador?--export-dpi=100
, onde 100 é th valor de dpiO InkscapeBatch faz o trabalho no Windows. Requer Inkscape .
fonte
Para a conversão de SVG para PNG, descobri que o cairosvg ( https://cairosvg.org/ ) tem um desempenho melhor que o ImageMagick. Etapas para instalação e execução em todos os arquivos em seu diretório.
Abra um shell python no diretório que contém os arquivos .svg e execute:
Isso também garantirá que você não substitua os arquivos .svg originais, mas manterá o mesmo nome. Você pode mover todos os seus arquivos .png para outro diretório com:
fonte
Depois de lutar com isso por quase 2 horas, resolvi-me com o Inkscape. Como eu precisava converter em lote vários arquivos em várias resoluções diferentes, criei um script do Powershell. Com 106 SVGs, meu computador congelou por cerca de 5 segundos, portanto, tenha cuidado ao usá-lo.
fonte
&
operador inicia um novo processo e continua imediatamente, portanto esse script criará tantos novos processos inkscape.exe quanto os arquivos svg. Acontece que isso torna seu computador muito lento por um tempo.| Out-Null
no final da linha que começa com&
ele forçará a execução do comando inkscape.exe, um de cada vez, o que funciona muito melhor para mim.Você pode usar o seguinte no Bash / Ubuntu para Windows, na pasta em que você tem os SVGs. Parece, no entanto, que o ImageMagick primeiro rasteriza e depois redimensiona, o que resulta em artefatos estranhos…
find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;
Veja também aqui a solução baseada no Inscape que parece estar funcionando bem (de outro segmento, link perdido):
mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;
fonte
find -name "*.svg" -exec inkscape {} -e {}.png \;
Embora eu prefiro esta versão:ls | grep ".svg" | xargs -I file inkscape file -e file.png
porque os arquivos são processados em ordem alfabética - este não é o caso, quando se utilizafind
O ImageMagick está disponível para Windows e pode converter entre SVG e PNG e ICO (entre outros). Você pode definir o tamanho e outros atributos para o arquivo de saída.
fonte
Não consegui encontrar um único comando que funcionasse para executar um lote, portanto, consegui-o gerando uma lista de arquivos e criando uma série de comandos. Essas instruções devem funcionar para todas as versões do Windows. Todas as instruções de digitação excluem citações e incluem tudo entre elas.
Para fazer isso, você precisará do Inkscape, MS Excel ou editor de planilha comparável e um gerador de lista. Há um ótimo gerador de lista de freeware aqui: https://www.portablefreeware.com/?id=1171
Se você fez isso corretamente, deverá ter uma linha para cada nome de arquivo que se pareça com isto: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ PNG \ | Nome do arquivo1.png |
Espero que facilite a vida de alguém. James
fonte
A resposta de Kai está próxima, mas não funcionou para mim. No entanto, com alguns pequenos ajustes, isso funcionou perfeitamente na primeira vez:
convert.bat
convert.bat
no seu editor de texto / código favorito e digite o seguinte:FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png
(Observe que o
inkscape.exe
local deve corresponder ao local do programa executável no seu PC; e o segundo anterior--export-png
é%%A
- esse é o arquivo SVG sendo convertido)convert.bat
para executar e deve ecoar os resultados das conversões.Observe que pode ser necessário atualizar sua pasta do Windows para ver os novos arquivos, mas todos eles devem ter sido criados no mesmo local que os SVGs originais.
fonte
Não foi possível fazer com que o imagemagick ou o inkscape funcionasse para mim por algum motivo. Eu só tinha 12 arquivos para converter, apenas usei este site manualmente: http://svgtopng.com/ funcionou.
fonte
Aqui está uma solução baseada no ImageMagick para converter todos os arquivos svg em um determinado diretório em arquivos ico:
Explicação:
mogrify
: Comoconvert
, mas permite processar vários arquivos em lote.-format ico
: Nosso formato de arquivo de destino. Cria.ico
arquivos em vez de sobrescrever o arquivo original (como o mogrify faria por padrão).-density 1200
: Como não podemos especificar um tamanho de pixel de destino para o qual o ImageMagick deve rasterizar o SVG (ele primeiro rasteriza com uma densidade padrão e depois escala), rasterizamos o SVG com uma resolução incrivelmente alta (1200 dpi), para garantir que a imagem será reduzido para 256x256 em vez de aumentado.-background transparent
: O plano de fundo será renderizado como transparente.-trim
: Remova a borda existente ao redor da imagem.-resize 256x256
: Dimensione a imagem, garantindo que o lado mais longo possua 256px, mantendo a proporção.-gravity center -extent 256x256
: Amplie a tela, garantindo que o lado curto também tenha 256px. A imagem existente é alinhada ao centro. Isso é necessário porque precisamos de uma imagem quadrada como base para um arquivo ICO.-define icon:auto-resize
: Inclua não apenas a imagem de 256x256, mas também todas as resoluções reduzidas recomendadas (por exemplo, 32x32) no arquivo ICO.fonte
A maioria das respostas fornecidas aqui ignora a parte do tamanho desejado da pergunta. Não foi possível obter resultados satisfatórios
convert
ao usar o "upscaling" de um SVG.inkscape
faz um trabalho melhor e também preserva a transparência do plano de fundo.Dependendo do seu caso de uso, use uma das seguintes opções:
inscape in.svg -d 300 -e out.png
inscape in.svg -w 800 -e output.png
inscape in.svg -h 600 -e output.png
Observe que especificar largura e altura não preserva a proporção da imagem.
Para converter muitos arquivos de uma só vez, ajuste o seguinte ao seu caso de uso (in
bash
ou compatível):fonte