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

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.


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.


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.


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.


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.


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.


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.


4

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

svgexport input.svg output.png

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

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.


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.


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

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).


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


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.


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.


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