Imagens em lote convertidas em SVG para tamanho desejado PNG ou ICO

25

Eu tenho um monte de ícones SVG que eu gostaria de usar para o meu aplicativo ser desenvolvido no VB.net 2010, e como ele não tem suporte para lidar com ícones SVG, eu preciso converter esses ícones em PNG ou ICO. , com resolução de saída preferida. Eu encontrei essa ferramenta de linha de comando para o Ubuntu chamado rsvgconvert . Nós temos essa ferramenta para o Windows também?

    
por Kushal 20.03.2011 / 20:01

12 respostas

11

O ImageMagick tem uma ferramenta de linha de comando que está disponível para Linux e Windows (e outros). A ferramenta de conversão é convenientemente chamada de "converter". Veja algumas documentação de uso .

E aqui é onde você pode obter um instalador do Windows .

    
por 20.03.2011 / 20:40
18

O ImageMagick não deve se associar imediatamente a qualquer tarefa em lote que envolva imagens. Especialmente neste caso, onde o ImageMagick é uma solução ruim para a conversão de SVG.

Tente melhor Inkscape na linha de comando:

inkscape in.svg --export-png=out.png

    
por 26.10.2012 / 00:57
5

A linha de comando não funcionou fora da caixa, além disso, eu queria que 100 arquivos fossem convertidos. Aqui está como eu fiz isso funcionar com o windows 7:

  1. instale o inkscape - não o portátil!

  2. copie todos os seus arquivos svg em uma pasta, por exemplo "C: \ svgs \" lá:

  3. você cria um arquivo convert.bat com essa linha:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (aponte para a pasta correta da sua instalação):

  4. 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".

  5. navegue até o seu "C: \ svgs \" e digite convert.bat - Todos os arquivos svg serão convertidos em PNGs.

  6. Use o Windows Explorer para procurar pelos 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ó poderia ser definida como possível, acabei usando o InkscapeBatch ferramenta . Lá eu poderia definir o DPI para aumentar todas as imagens relativamente.

Você precisa especificar as configurações corretas ou não funcionará. Aqui está o que eu fiz:

Depois de clicar em "Concluir", você precisa pressionar o botão "Iniciar batch converter ..." na barra de ferramentas:

    
por 02.07.2014 / 00:18
3

InkscapeBatch faz o trabalho no Windows. Requer Inkscape .

    
por 04.06.2013 / 13:56
2

Para a conversão de SVG para PNG, descobri que o cairosvg ( link ) funciona melhor que o ImageMagick. Etapas para instalar e executar em todos os arquivos em seu diretório.

pip3 install cairosvg

Abra um shell python no diretório que contém seus arquivos .svg e execute:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

Isso também garantirá que você não sobrescreva seus arquivos .svg originais, mas manterá o mesmo nome. Você pode então mover todos os seus arquivos .png para outro diretório com:

$ mv *.png [new directory]
    
por 11.05.2018 / 23:27
1

Depois de lutar com isso por quase duas horas, eu me estabeleci com o Inkscape. Desde que eu precisei converter muitos arquivos em muitas resoluções diferentes, eu criei um script Powershell. Com 106 SVGs meu computador congelou por cerca de 5 segundos, então tenha cuidado ao usar isso.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}
    
por 29.07.2015 / 17:21
1

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, em seguida, 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 a solução baseada no Inscape que parece estar funcionando bem (de outro thread, perda de link): 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;

    
por 29.05.2018 / 01:10
0

O ImageMagick está disponível para Windows e pode converter entre SVG e PNG e ICO (entre outros). Você pode definir tamanho e outros atributos para o arquivo de saída.

    
por 20.03.2011 / 20:48
0

Não consegui encontrar um único comando que funcionasse para executar um lote, então consegui que ele funcionasse 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 as citações e incluem tudo entre elas.

Para fazer isso, você precisará do Inkscape, do MS Excel ou de um editor de planilhas comparável e de um gerador de listas. Há um ótimo gerador de lista de freeware aqui: link

  • Hardlink, copie ou mova todos os arquivos svg para uma pasta.
  • Gere uma lista de arquivos dessa pasta e exporte para o csv.
  • Abra o csv no Excel e exclua todas as colunas, exceto a coluna do nome do arquivo. Exclua também cabeçalhos de coluna como [Caminho] e texto de resumo na parte inferior.
  • Se os nomes dos arquivos ainda não estiverem na segunda coluna, recorte e cole-os lá.
  • Na primeira célula da primeira coluna, digite inkscape seguido por um espaço e o caminho da pasta onde seus arquivos svg estão incluindo uma barra invertida à direita (por exemplo, "inkscape C: \ SVG \"). Em seguida, copie esta célula, selecione todas as células abaixo dela que precedam um nome de arquivo e cole para que todos tenham o mesmo texto.
  • Na terceira coluna, digite --export-png = na primeira célula seguida da pasta de destino em que deseja salvá-los. Acabei de usar a mesma pasta. Para que a sintaxe esteja correta, adicione um espaço no início, mas mantenha o restante do texto junto (por exemplo, "--export-png = C: \ PNG \"). Copie e cole isso para todas as linhas, assim como a primeira coluna
  • Copie toda a segunda coluna e cole-a na quarta coluna. Com essa quarta coluna selecionada, pressione Ctrl + H (Localizar e substituir). No campo de localização, digite ".svg". No campo de substituição, digite ".png" e, em seguida, selecione Substituir tudo.

Se você fez isso corretamente, você deve ter uma linha para cada nome de arquivo que se parece com isso: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ PNG \ | Filename1.png |

  • Na primeira célula da quinta coluna digite "= concatenate (a2, b2, c2, d2)". Isso pressupõe que a coluna do cabeçalho não foi excluída. Os números de células entre parênteses devem concordar com o número da linha atual. Se o seu primeiro nome de arquivo estiver em B2, a fórmula acima será exata. Caso contrário, corrija os nomes das células entre parênteses para corresponder à primeira linha do nome do arquivo (por exemplo, a1, b1, c1 ...)
  • Copie e cole essa célula para preencher tudo abaixo dela, assim como as colunas 1 e 3.
  • Agora copie toda a quinta coluna e use Colar especial > Valores para colar o texto produzido pelas fórmulas na sexta coluna. Esta sexta coluna é seu tiro do dinheiro. Copie a sexta coluna inteira, abra o Bloco de Notas e cole a última coluna nela. Se você fez isso corretamente, você terá uma linha de comando para converter cada um dos seus arquivos svg em pngs.
  • Salve o arquivo do Bloco de Notas no diretório do Inkscape como um arquivo em lotes. Quando a janela Salvar como abrir, altere Salvar como tipo para "Todos os arquivos" e salve-o como um arquivo .bat (por exemplo, "C: \ Arquivos de programas \ Inkscape \ SVGBatch.bat"
  • Tudo o que resta fazer é ir para essa pasta e clicar duas vezes no arquivo em lote que você acabou de salvar. Ele deve abrir um prompt de comando e converter todos os arquivos.

Espero que isso facilite a vida de alguém. James

    
por 06.01.2017 / 03:19
0

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:

  1. Copie seus SVGs para um local prático
  2. Crie um arquivo de texto na mesma pasta e renomeie-o convert.bat
  3. Abra 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 em seu PC; e o segundo antes de --export-png é %%A - que é o arquivo SVG sendo convertido)

  1. Clique duas vezes em convert.bat para executar e deve ecoar os resultados das conversões.

Observe que você pode precisar atualizar sua pasta do Windows para ver os novos arquivos, mas todos eles devem ter sido criados no mesmo local que os SVGs originais.

    
por 24.03.2017 / 19:08
0

Não foi possível usar o imagemagick ou o inkscape por algum motivo. Eu só tinha 12 arquivos para converter apenas usado este site manualmente: link funcionou um tratamento.

    
por 02.11.2017 / 12:47
0

Aqui está uma solução baseada em ImageMagick para converter todos os arquivos svg em um determinado diretório para arquivos ico:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Explicação:

  • mogrify : como convert , mas permite processar vários arquivos em lote.
  • -format ico : nosso formato de arquivo de destino. Cria arquivos .ico 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 alvo que o ImageMagick deve rasterizar para o SVG (primeiro seria rasterizar com uma densidade padrão e depois dimensionar), rasterizamos o SVG com uma resolução insanamente alta (1200dpi), para garantir que a imagem será diminuída para 256x256 em vez de aumentada.
  • -background transparent : o fundo será renderizado como transparente.
  • -trim : remover a borda existente ao redor da imagem.
  • -resize 256x256 : dimensione a imagem, garantindo que o lado mais longo tenha 256 pixels, mantendo a proporção.
  • -gravity center -extent 256x256 : amplia a tela, garantindo que o lado menor tenha 256 pixels também. 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 256x256, mas também todas as resoluções recomendadas com redução de escala (por exemplo, 32x32) no arquivo ICO.
por 05.11.2018 / 16:38