Как пакетное преобразование растровых изображений в SVG?

13

У меня есть много серых растровых изображений, которые мне нужно преобразовать в векторный формат, такой как SVG. Я использую Inkscape, который дает хорошие результаты, но это занимает около 10-15 минут, чтобы открыть, преобразовать и сохранить файл. Есть ли пакет или инструмент командной строки, который может преобразовать их?

Деревня
источник
Вы можете посмотреть на potraceэто.
Стефан Шазелас
также можно использовать Inkscape в качестве ссылки на

Ответы:

19

Potrace

Я нашел этот пример на SO в Q & A под названием: Как преобразовать изображение JPEG в формат SVG, используя ImageMagick? , Один из предложенных ответов potrace.

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

Результаты

           сс # 1             сс # 2

Глядя на potraceсайт, вы можете перейти непосредственно от BMP к SVG.

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

автотрассировка

Другим вариантом potraceявляется autotrace.

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

Скорее всего, вам придется поиграть с --color-countизображением, которое соответствует вашим потребностям.

Результаты

                                                 сс # 3

Какой использовать?

Из этих 2 это действительно зависит от исходного материала. Если вы конвертируете изображения, то potrace, вероятно, лучший вариант. Для не-фото материала, такого как шрифты и неодушевленные объекты, такие как декорации, которые включают в себя такие вещи, как дороги, то autotraceс его --centerlineпереключателем.

Хотя он не оптимален для фотографий, он отлично справляется с штриховыми рисунками и постерными изображениями. Не очень хорошо с цветом. Autotrace имеет некоторые функции, недоступные во встроенном диалоге Potrace в Inkscape. Например, есть переключатель центральной линии, который особенно полезен для отслеживания дорог (на картах) или символов шрифта.

Пакетные преобразования

Вы можете обернуть любую из этих команд в цикл for в Bash, что облегчит выполнение задач массового преобразования.

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

Ссылки

SLM
источник
нет необходимости хранить промежуточный файл из JPEG. в качестве однострочника я использовал:convert -channel RGB -compress None input.jpg bmp:- | potrace -s - -o output.svg
Луи Мэддокс
9

Autotrace

Вы можете попробовать автоматическую трассировку .

Используя следующую команду, вы получите следующие результаты:

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

Мне пришлось сделать снимок экрана с полученным SVG и сохранить как PNG, чтобы показать вывод.

Вот исходное изображение jpg:

источник черепа

Вот результирующее изображение:

преобразование черепа

очий
источник
7

Обычно я выполняю все свои задачи по работе с изображениями convertиз ImageMagic, но не могу заставить его хорошо играть с файлами SVG. Однако вы можете использовать inkscapeсебя из командной строки:

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

Это создаст файлы с именем foo.bmp.svg. Чтобы получить правильные имена, попробуйте это:

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

Проблема этого подхода заключается в том, что, по крайней мере, в моей системе появляется всплывающее графическое диалоговое окно с вопросом, хочу ли я связать или внедрить изображение:

                                 введите описание изображения здесь

Таким образом, вам все равно нужно нажимать ОК вручную, но это все же намного быстрее, чем делать это файл за файлом.

Насколько я могу судить, выходные изображения идентичны:

   введите описание изображения здесь


Теоретически, и то, convertи другое rsvg-convertдолжно быть в состоянии сделать это, но я не мог заставить его работать хорошо на моих изображениях за те несколько минут, которые я потратил, пытаясь. Тем не менее, они оба заслуживают внимания.

Тердон
источник
Я не уверен, но на веб-сайте Inkscape написано, что он уже potraceвстроен, так что мне интересно, использует ли он этот инструмент? цитата: «Potrace теперь встроен в Inkscape. Вам не нужно запускать его отдельно». - wiki.inkscape.org/wiki/index.php/Tools
ОДС
5
Я подозреваю, что Inkscape просто вставит растровое изображение в SVG, следовательно, их идентичный вид.
user2428118
@ user2428118 Я подозреваю, что ты прав. Это может быть или не быть проблемой в зависимости от того, что именно вы хотите сделать с этими изображениями.
Terdon
1

potraceэто инструмент для этого. Вы можете обрабатывать их в большом количестве, но сначала вы должны преобразовать изображения в монохромные:

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

Установить в Ubuntu:

sudo apt install potrace

Если вы хотите преобразовать изображения, которые не являются монохромными, Inkscapeимеют основу инструмента трассировки на potrace, которая поддерживает несколько цветов, сначала она преобразует изображение в цветные слои, а затем прослеживает их и объединяет результат.

Чтобы использовать трассировщик, загрузите или импортируйте изображение, выберите его и выберите « Путь» > « Элемент растрового изображения» или Shift+ Alt+B.

Видеть

Учебник здесь!

Эдуард Флоринеску
источник