Comment convertir par lots des bitmaps en SVG?

13

J'ai de nombreux bitmaps d'échelle de gris que je dois convertir en un format vectoriel, tel que SVG. J'utilise Inkscape, ce qui donne de bons résultats, mais cela prend environ 10-15 minutes pour ouvrir, convertir et enregistrer un fichier. Existe-t-il un outil de traitement par lots ou en ligne de commande qui peut les convertir?

Village
la source
vous voudrez peut-être aussi y jeter un œil potrace.
Stéphane Chazelas
il est également possible d'utiliser inkscape comme lien

Réponses:

19

potrace

J'ai trouvé cet exemple sur SO dans un Q&A intitulé: Comment convertir une image JPEG au format SVG en utilisant ImageMagick? . Une des réponses suggérées potrace.

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

Résultats

           SS # 1             SS # 2

En regardant le potracesite Web, vous pouvez apparemment passer directement de BMP à SVG.

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

autotrace

Une autre option potraceest autotrace.

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

Vous devrez probablement jouer avec --color-countpour obtenir une image adaptée à vos besoins.

Résultats

                                                 SS # 3

Lequel utiliser?

De ces 2, cela dépend vraiment du matériel source. Si vous convertissez des images, potracec'est probablement la meilleure option. Pour le matériel non photo tel que les polices et les objets inanimés tels que les paysages qui incluent des choses comme les routes, puis autotraceavec son --centerlineinterrupteur.

Bien qu'il ne soit pas optimal pour les photos, il fait du bon travail en ligne et des images de type affiche. Ne fait pas trop bien avec la couleur. Autotrace possède certaines fonctionnalités non disponibles dans la boîte de dialogue Potrace intégrée dans Inkscape. Par exemple, il existe un commutateur de ligne centrale qui est particulièrement utile pour tracer des routes (dans les cartes) ou des caractères de police.

Conversions par lots

Vous pouvez encapsuler l'une de ces commandes dans une boucle for dans Bash, ce qui facilitera la tâche de conversion en masse.

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

Les références

slm
la source
il n'est pas nécessaire de stocker un fichier intermédiaire à partir du JPEG. en monoplace j'ai utilisé:convert -channel RGB -compress None input.jpg bmp:- | potrace -s - -o output.svg
Louis Maddox
9

Autotrace

Vous pouvez essayer le suivi automatique .

En utilisant la commande suivante, vous obtenez les résultats suivants:

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

J'ai dû prendre une capture d'écran du svg résultant et l'enregistrer au format png pour afficher la sortie.

Voici une image source jpg:

source de crâne

Voici l'image résultante:

conversion de crâne

rking
la source
7

Normalement, je fais toutes mes tâches de manipulation d'image avec convertImageMagic mais je n'arrive pas à le faire jouer correctement avec les fichiers svg. Vous pouvez cependant utiliserinkscape depuis la ligne de commande:

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

Cela va créer des fichiers appelés foo.bmp.svg. Pour obtenir les bons noms, essayez ceci:

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

Le problème avec cette approche est qu'au moins sur mon système, il apparaît une boîte de dialogue graphique ennuyeuse me demandant si je veux lier ou incorporer l'image:

                                 entrez la description de l'image ici

Donc, vous devez toujours cliquer sur OK manuellement, mais c'est toujours beaucoup plus rapide que de le faire fichier par fichier.

Les images de sortie sont identiques pour autant que je sache:

   entrez la description de l'image ici


Théoriquement, les deux convertet rsvg-convertdevraient pouvoir le faire, mais je n'ai pas pu le faire fonctionner correctement sur mes images dans les quelques minutes que j'ai passées à essayer. Ils méritent tous les deux d'être examinés néanmoins.

terdon
la source
Je ne suis pas positif, mais sur le site Web d'Inkscape, il est dit qu'il est désormais potraceintégré, alors je me demande s'il utilise simplement cet outil de toute façon? citation: "Potrace est maintenant intégré à Inkscape. Vous n'avez pas besoin de l'exécuter séparément." - wiki.inkscape.org/wiki/index.php/Tools
slm
5
Je soupçonne qu'Inkscape incorporera simplement l'image bitmap à l'intérieur du SVG, d'où leur aspect identique.
user2428118
@ user2428118 Je suppose que vous avez raison. Cela peut ou non être un problème selon ce que vous voulez faire exactement avec ces images.
terdon
1

potraceest l'outil pour cela. Vous pouvez les traiter en masse, mais vous devez d'abord convertir les images en monochrome:

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

Installez sur Ubuntu:

sudo apt install potrace

Si vous souhaitez convertir des images qui ne sont pas monochromes, Inkscapepossède une base d'outils de traçage sur Potrace qui prend en charge plusieurs couleurs, il convertit d'abord l'image en couches de couleur, puis il les trace et combine le résultat.

Pour utiliser le traceur, charger ou importer une image, sélectionnez-la et sélectionnez l' élément Path > Trace Bitmap , ou Shift+ Alt+B.

Voir

Tutoriel ici!

Eduard Florinescu
la source