Você precisa de imagemagick para o convert
comando e potrace para o potrace
comando. Ambos podem provavelmente ser instalados através do seu instalador de pacote confiável (homebrew no OSX, por exemplo).
Isso pressupõe que os PNGs originais tenham apenas duas cores: transparente e branco. Os SVGs resultantes serão transparentes e pretos, mas isso é fácil de alterar nos próprios arquivos SVG resultantes.
Sem mais delongas:
for f in *_shape.png; do convert $f -fill black -opaque white -alpha off $(echo $f | sed 's/.png$/.pnm/') && potrace $(echo $f | sed 's/.png$/.pnm/') -s -o $(echo $f | sed 's/.png$/.svg/') && cp $(echo $f | sed 's/.png$/.svg/g') my/new/folder/; done
Uau, isso parece muito. Análise rápida:
Copie arquivos em lote para um novo local:
for f in *_shape.png; do cp $f my/new/folder/; done
Converta um único PNG em SVG:
convert pic.png -fill black -opaque white -alpha off pic.pnm && potrace pic.pnm -s -o pic.svg
Ok, essa parte é complicada. Você precisa primeiro convertê-lo para o tipo de arquivo intermediário de “PNM”, porque potrace
pode funcionar com eles, mas não com PNGs.
E vamos explicar essa parte: tudo isso vem , como parte de seu comando. Diz “preencha as partes brancas opacas com preto e desligue a transparência”. O que resultará em uma foto transparente e branca sendo branca e preta.-fill black -opaque white -alpha off
imagemagick
convert
O mesmo ocorre com um comando para transformar um PNG transparente e branco em um PNM branco e preto.convert pic.png -fill black -opaque white -alpha off pic.pnm
imagemagick
Que é exatamente o tipo de arquivo de imagem que potrace
pode se transformar em um SVG. Que é o que a próxima parte deste comando faz: .potrace pic.pnm -s -o pic.svg
conversão em lote de PNGs para SVGs:
for f in *_shape.png; do convert $f -fill black -opaque white -alpha off $(echo $f | sed 's/.png$/.pnm/') && potrace $(echo $f | sed 's/.png$/.pnm/') -s -o $(echo $f | sed 's/.png$/.svg/'); done
Ok, se você ignorar todas as partes em , isso é na verdade muito semelhante ao comando para converter um PNG em um SVG. Está apenas embrulhado em um .$(...)
for f in ...; do ...; done
Essas partes estão lá porque não sabemos mais o nome do arquivo exato, mas precisamos alterá-lo. Você pode renomear arquivos em massa da mesma maneira para que todos correspondam a um novo padrão.$(...)
Aqui está uma explicação:
$(echo $f | sed 's/.png$/.pnm/')
sed
é uma ferramenta de edição de linha de comando. Você poderia, se quisesse, usá-lo em vez de vim
ou Sublime Text para editar seu código-fonte.
Vamos analisar essa peça por peça:
echo $f
– imprima o que quer que seja$f
atualmente para padronizarecho $f | sed
– canalize esse padrão para osed
comando. Então agorased
vai operar e mudar o que quer que$f
sejased 's/.png$/.pnm/'
– o sed substituirá a.png
no final do nome do arquivo por um.pnm
$(...)
– é assim que você pode colocar um subcomando dentro de um comando maior
Todos juntos agora:
for f in *_shape.png; do convert $f -fill black -opaque white -alpha off $(echo $f | sed 's/.png$/.pnm/') && potrace $(echo $f | sed 's/.png$/.pnm/') -s -o $(echo $f | sed 's/.png$/.svg/') && cp $(echo $f | sed 's/.png$/.svg/g') my/new/folder/; done
Deve fazer mais sentido agora!