Aplicativo de linha de comando para converter SVG em PNG no Mac OS X

167

Existem programas de linha de comando que podem converter um SVG em PNG, executados no Mac OS X?

Edit : Dylan B teve uma boa resposta com o ImageMagick. Para referência, para instalar o ImageMagick com suporte SVG no Mac OS X usando o MacPorts, faça

port install imagemagick +rsvg
Lorin Hochstein
fonte
2
Eu encontrei uma maneira se você tiver o Google Chrome ... e não há necessidade de instalar outras coisas: superuser.com/questions/134679/…
nopole
O cairosvg.org funciona para python3 e parece não ter problemas. pip3 install cairosvg
JayRizzo

Respostas:

234

Ou sem instalar nada:

qlmanage -t -s 1000 -o . picture.svg 

Ele produzirá picture.svg.png com 1000 pixels de largura.

Eu testei apenas no OS X 10.6.3.

tst
fonte
38
Infelizmente, isso recorta imagens em um quadrado.
Martijn Pieters
7
Ah, qlmanage -tfornece a miniatura usada pelo Quick Look (no Finder, etc.). Ideia inteligente. Infelizmente, essas miniaturas podem ter erros, principalmente quando há texto envolvido.
ShreevatsaR
7
Isso produz imagens com o arquivo svg no 1º quadrante. Não recorta automaticamente. Tentando converter arquivos do projeto substantivo - gostaria que isso funcionasse.
Alex Cozinhe
7
Esta solução falha ao levar em consideração a transparência. A ferramenta rsvg-convertna resposta da @ ahti funcionou antes para mim.
BenR 19/05/19
3
Colocar os parâmetros de largura e altura após a -sopção não funcionou para mim. Ainda o corta para um quadrado. Muito frustrante!
Erik van der Neut
107

Eu descobri que para mim a melhor ferramenta para o trabalho é rsvg-convert.

Pode ser encontrado em brew com brew install librsvge é usado assim:

rsvg-convert -h 32 icon.svg > icon-32.png

(Este exemplo cria um png de 32px de altura. A largura é determinada automaticamente.

Ahti
fonte
Este é o único que trabalhou para mim em Mavericks e commons.wikimedia.org/wiki/...
Aron Ahmadia
Na verdade, este funcionou, enquanto o ImageMagick convertemitiu erros e não conseguiu ocultar um SVG complexo.
Brice
7
Esta é de longe a melhor solução que encontrei para o OS X Yosemite +1!
Greg Martin
Isso falhou para alguns dos meus SVGs, estranhamente. A qlmanageresposta funcionou para todos eles, mas colocou um fundo branco, o que eu não quero.
Sudo #
11
Com rsvg-convert, o .png resultante tinha as dimensões corretas, mas a imagem saiu toda preta, em vez das cores originais. Com qlmanagea imagem é cortada para um quadrado. Ainda à procura de uma solução :-(
Erik van der Neut
43

O ImageMagick é um editor de imagens de linha de comando extremamente versátil, que provavelmente rivalizaria com o Photoshop se tivesse uma GUI. Mas quem precisa disso de qualquer maneira. : P

Algo como o seguinte converteria um arquivo .svg em .png, após a instalação:

$ convert picture.svg picture.png

O original .svg não é excluído.

Jessie
fonte
Ele meio que tem uma interface gráfica display.
Ignacio Vazquez-Abrams
11
Quando instalei o ImageMagick com o Fink, não consegui converter svg para png - houve alguns erros. Aconteceu que eu precisava instalar o librsvg2-bin também.
tst
Se o librsvg2-bin não estiver instalado (como no OS X), isso falhará. Não foi possível encontrar uma maneira de obter esse instalado no OS X.
John Sheehan
3
Isso não funcionará bem se você quiser redimensionar o SVG, pois gera imagens borradas.
Behrang
3
Também não converte todos os arquivos SVG corretamente; pelo menos qlmanage obteve todas as partes da imagem.
Johan
28

O Inkscape com sua interface Commandline produz os melhores resultados para mim:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

O bom é que você pode especificar o tamanho exato de pixel da imagem resultante, sem precisar mexer na densidade.

seb
fonte
isso está funcionando para mim! - ihave um SVG maior criado com o Inkscape
matheszabi
Este é o único método que tornou minha SVG escrita à mão corretamente
Griffin
O Convert não gera bons arquivos PNG a partir do SVG. Usar o Inkscape é a melhor maneira que encontrei até agora.
27615 ol_v_er 7:15
Isso funciona para mim, mas cria arquivos extremamente embaçados.
Marcin
3
Eu tive um problema para encontrar arquivos para executá-lo comoinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei
16

OK, encontrei uma maneira simples de fazer isso no Mac, se você tiver o Google Chrome.

Em uma frase, é para ver a svgimagem em uma página da web (deve estar em um htmlarquivo), clique com o botão direito do mouse na imagem e escolha "Copiar imagem" e cole no aplicativo Visualizar.

Passos:

  1. Faça o download ou tenha o svgarquivo no seu disco rígido, por exemplo,somefile.svg
  2. Agora, na mesma pasta, basta criar um arquivo html tmp.htmlque contenha esta linha:<img src="somefile.svg">
  3. Agora, abra esse arquivo html no Google Chrome
  4. Você deve ver a imagem. Agora clique com o botão direito na imagem e escolha "Copiar imagem"
  5. Acesse o App de visualização do Mac e escolha "File -> New from Clipboard"
  6. Agora File -> Saveo arquivo e você tem o pngarquivo. (ou outros tipos de arquivo).

Isso foi testado no Chrome atual (versão 48.0) no Mac OS X El Capitan.

Atualização : não tenho certeza se é devido a alguma restrição imposta pelo Google Chrome. Acabei de experimentar um arquivo SVG usando o Chrome 58.0 e recebo uma pequena imagem do método acima. Se você vir esse caso também, também poderá usar

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

e você terá uma imagem na tela suficientemente boa para fazer uma captura de tela - usando CmdShift4ou CmdShift3no Mac, por exemplo. Redimensione sua janela do Chrome para o máximo permitido na tela.

nopole
fonte
Solução inteligente!
Manu
11
Na verdade, isso produz os melhores resultados para mim, pois é exatamente o mesmo que o navegador.
precisa saber é o seguinte
a imagem resultante era muito pobre resolução para mim
Michael
Engenhoso :) mas para SVGs muito grandes, a resolução da imagem resultante é muito baixa, como o @Michael mencionou.
waldyrious
5

Se você quiser fazer muitas de uma vez, você pode:

mogrify -format png *.svg

Existem opções para redimensionar etc em tempo real também.

DefenestrationDay
fonte
3
mogrifytambém é par do ImageMagick.
precisa
Funciona muito bem, mas brutalmente lento.
Meekohi 24/01
-1? Alguém acha que isso não é útil? Qual é o erro?
precisa
2
Não fui eu quem diminuiu o voto, mas vale a pena notar que o ImageMagick converte estupidamente svg em uma imagem raster de tamanho arbitrário antes de redimensionar, resultando em resultados embaçados.
Dae
4

Experimente o Apache Batik .

java -jar batik-rasterizer.jar FILES

Ele também suporta conversão em lote e tem muitas outras opções úteis.

Behrang
fonte
4

Eu fiz o svgexport usando o node / npm para isso, é multiplataforma e pode ser tão simples quanto:

svgexport input.svg output.png
Ali Shakiba
fonte
Este foi o mais fácil de usar e lembrar de longe. Além disso, o único que produziu um resultado correto no meu caso.
Marko Grešak
a resolução resultante não foi ótima para mim.
Michael
3

Você também pode usar phantomjs para renderizar o svg. A vantagem é que ele é renderizado como um navegador, uma vez que é basicamente um WebKit sem cabeça.

Depois de baixá-lo, você precisa de phantomjs (binário) e do arquivo rasterizer.js da pasta de exemplos.

phantomjs examples/rasterize.js Tiger.svg out.png
Stofke
fonte
11
Para referência, isso pode ser instalado com brew cask install phantomjs. Na minha instalação, a pasta de exemplos estava localizada no caminho /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
waldyrious
2

Isto é o que eu usei:

brew install imagemagick --with-librsvg

Em seguida, execute os seguintes comandos:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

Espero que ajude.

Alan Dong
fonte
1

Eu uso esse comando no meu linux. Deve funcionar para você também.

mogrify +antialias -density 2000 -verbose -format png *.svg

Aprendi que, sem o argumento "-density", o bitmap seria muito pixelizado. Altere o valor -density para atender às suas necessidades.

BersekerBernhard
fonte
2
Mesmo com a densidade, a conversão não gera uma imagem tão nítida quanto uma imagem vetorial. Experimente o Apache Batik.
Behrang
1

O comando convert do ImageMagick, usando alguns outros parâmetros, foi o que fez por mim. Aqui está a minha solução de script em lote do Bash que divide a tarefa em vários processos para usar todos os seus núcleos! Modifique conforme necessário.

batchConvertToSVG.sh (usa o número de processos como argumento):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done
sudo
fonte
0

Como comentado anteriormente, o ImageMagick faz o truque. Eu só queria adicionar um ponto ao GraphicsMagick , um antigo fork do ImageMagick que possui algumas melhorias (e muito menos inchaço da dependência quando instalado via fink).


fonte
0

Você pode executar uma conversão em lote em uma pasta inteira de arquivos SVG em PNG. Usei a interface de linha de comando do Inkscape para produzir arquivos png com uma largura de 80px.

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png será salvo com o nome original * .png

James Matthew Mudgett
fonte
0

Outro método sem instalar nada. Não está na linha de comando.

  1. Abra o arquivo .svg no Safari.
  2. Pressione alt-command-i para abrir o inspetor.
  3. Clique com o botão direito do mouse na <svg>tag, selecione "Capturar captura de tela". (Observe que você não deve ampliar a imagem.)

PS Para ampliar a imagem .svg, se ela for muito pequena, tente abrir o arquivo .svg no editor de texto e acrescente 0a cada número, exceto no meta-atributo. Isso pode ser feito por uma substituição de regex global de (\d+)para $10, onde $1é o espaço reservado para referência anterior, por exemplo.

Haotian Yang
fonte
Você provavelmente deve mencionar que isso é quase o mesmo que a  resposta de 太極 者 無極 而 生 .
Scott
-1

wkhtmltoimage (do projeto wkhtmltopdf) fez isso converter bem:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick renderiza o caractere CJK em branco no meu mac.

georgexsh
fonte
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada. - Do comentário
Blackwood
@ Blackwood bem, atualizado.
Georgexsh