Como converter bitmaps em lote para SVGs?

13

Eu tenho muitos bitmaps em escala de cinza que preciso converter para um formato vetorial, como SVG. Estou usando o Inkscape, que fornece bons resultados, mas isso leva de 10 a 15 minutos para abrir, converter e salvar um arquivo. Existe uma ferramenta de linha de comando ou lote que possa convertê-las?

Vila
fonte
você pode querer dar uma olhada potracetambém.
Stéphane Chazelas
também é possível usar o inkscape como link

Respostas:

19

potrace

Encontrei este exemplo no SO em uma sessão de perguntas e respostas intitulada: Como converter uma imagem JPEG no formato SVG usando o ImageMagick? . Uma das respostas sugeridas potrace.

$ convert input.jpg output.ppm
$ potrace -s output.ppm -o svgout.svg

Resultados

           ss # 1             ss # 2

Olhando para o potracesite, você aparentemente pode ir diretamente do BMP para o SVG.

$ potrace -s input.bmp -o output.svg

rastreamento automático

Outra opção potraceé autotrace.

$ autotrace -output-file ouput.svg -output-format svg --color-count 4 input.bmp

Você provavelmente precisará brincar com o --color-countpara obter uma imagem que atenda às suas necessidades.

Resultados

                                                 ss # 3

Qual usar?

Destes 2, realmente depende do material de origem. Se você estiver convertendo imagens, potraceprovavelmente é a melhor opção. Para material não-fotográfico, como fontes e objetos inanimados, como paisagens que incluem coisas como estradas, depois autotracecom o --centerlineinterruptor.

Embora não seja ideal para fotos, ele faz um bom trabalho na arte de linha e nas imagens de pôsteres. Não se sai muito bem com cores. O Autotrace possui alguns recursos não disponíveis na caixa de diálogo incorporada do Potrace no Inkscape. Por exemplo, há uma opção de linha central que é especialmente útil para rastrear estradas (em mapas) ou caracteres de fonte.

Conversões em lote

Você pode agrupar um desses comandos em um loop for no Bash, o que facilitará o trabalho de realizar tarefas de conversão em massa.

$ for i in *.bmp; do <CONVERSION TOOL> ... "$i"; done

Referências

slm
fonte
não é necessário armazenar um arquivo intermediário do JPEG. como one-liner eu usei:convert -channel RGB -compress None input.jpg bmp:- | potrace -s - -o output.svg
Louis Maddox
9

Autotrace

Você pode tentar rastrear automaticamente .

Usando o seguinte comando, você obtém os seguintes resultados:

autotrace --output-format svg --output-file output.svg --color-count 4 imgsrc.jpg

Eu tive que pegar uma captura de tela do svg resultante e salvar como png para mostrar a saída.

Aqui está uma imagem de origem jpg:

fonte do crânio

Aqui está a imagem resultante:

conversão do crânio

rking
fonte
7

Normalmente, eu faço todas as minhas tarefas de manipulação de imagens convertdo ImageMagic, mas não consigo que ele funcione bem com arquivos svg. Você pode, no entanto, usar- inkscapese na linha de comando:

for i in *bmp; do inkscape -f "$i" -l "$i.svg"; done

Isso irá criar arquivos chamados foo.bmp.svg. Para acertar os nomes, tente o seguinte:

for i in *bmp; do inkscape -f "$i" -l "${i%.bmp}.svg"; done

O problema com essa abordagem é que, pelo menos no meu sistema, ele exibe uma caixa de diálogo gráfica irritante perguntando se eu quero vincular ou incorporar a imagem:

                                 insira a descrição da imagem aqui

Portanto, você ainda precisa clicar em OK manualmente, mas ainda é muito mais rápido do que fazer arquivo por arquivo.

As imagens de saída são idênticas, tanto quanto eu posso dizer:

   insira a descrição da imagem aqui


Teoricamente, ambos converte rsvg-convertdevem ser capazes de fazer isso, mas não consegui que funcionasse bem em minhas imagens nos poucos minutos que passei tentando. Ambos valem a pena investigar, no entanto.

terdon
fonte
Não sou positivo, mas no site do Inkscape ele diz que agora está potraceincorporado, então eu me pergunto se ele está usando essa ferramenta de qualquer maneira. citação: "O Potrace agora está incorporado no Inkscape. Você não precisa executá-lo separadamente." - wiki.inkscape.org/wiki/index.php/Tools
slm
5
Eu suspeito que o Inkscape simplesmente incorpore a imagem de bitmap dentro do SVG, daí sua aparência idêntica.
usar o seguinte comando
@ user2428118 Suspeito que você esteja certo. Isso pode ou não ser um problema, dependendo do que exatamente você deseja fazer com essas imagens.
terdon
1

potraceé a ferramenta para isso. Você pode processá-las em massa, mas primeiro é necessário converter as imagens em monocromático:

ls ./*.jpg | xargs -L1 -I {}  convert -monochrome {} {}.ppm
ls -1 ./*.ppm | xargs -L1 -I {} potrace {} -r 300 -b svg -o {}.svg

Instale no Ubuntu:

sudo apt install potrace

Se você deseja converter imagens que não são monocromáticas, Inkscapetem uma ferramenta de rastreamento baseada no potrace que suporta várias cores, ela primeiro converte a imagem em camadas de cores e depois as rastreia e combina o resultado.

Para usar o rastreador, carregue ou importe uma imagem, selecione-a e selecione o item Caminho > Rastrear bitmap ou Shift+ Alt+B.

Vejo

Tutorial aqui!

Eduard Florinescu
fonte