converter em lote PNGs para SVGs usando bash e copiar para um novo local

Você precisa de imagemagick para o convertcomando e potrace para o potracecomando. 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 potracepode 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 offimagemagickconvert

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

Que é exatamente o tipo de arquivo de imagem que potracepode 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 vimou Sublime Text para editar seu código-fonte.

Vamos analisar essa peça por peça:

  • echo $f– imprima o que quer que seja $fatualmente para padronizar
  • echo $f | sed– canalize esse padrão para o sedcomando. Então agora sedvai operar e mudar o que quer que $fseja
  • sed 's/.png$/.pnm/'– o sed substituirá a .pngno 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!