Командная строка Inkscape конвертирует список файлов

Я использую пакетный скрипт Windows в Powershell для преобразования всех пронумерованных файлов .svg в папке в .png, используя Inkscape в командной строке, на основе ответа на предыдущий вопрос здесь.

@echo off
for %%i in ("%~dp0*.svg") do (
    echo %%i to %%~ni.png
    "C:\Program Files\Inkscape\bin\inkscape.com" --export-type="png" --export-background-opacity=1.0 "%%i"
)

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

Можно ли для этого использовать режим --shell? Я не могу найти пример, который использует этот подход.


person feedMe    schedule 19.02.2021    source источник
comment
На это, вероятно, ответит документация по продукту. wiki.inkscape.org/wiki/index.php/ и gitlab.com/inkscape/inkscape/-/issues/640#note_268087574   -  person lit    schedule 20.02.2021
comment
Спасибо, я прочитал документацию. Количество примеров там ограничено, и я не видел примера того, что я надеялся сделать, но я разобрался и опубликовал свой собственный ответ.   -  person feedMe    schedule 20.02.2021
comment
похоже, что Inkscape - это проект с открытым исходным кодом. Любой может изменить код, чтобы делать то, что он хочет. Может быть достаточно интереса, чтобы его можно было внести обратно в пакет. inkscape.org/contribute   -  person lit    schedule 20.02.2021
comment
Да, и они могут.   -  person feedMe    schedule 20.02.2021
comment
Вы можете преобразовать все файлы SVG в каталоге в PNG, используя ImageMagick с magick mogrify -format PNG *.svg   -  person Mark Setchell    schedule 20.02.2021
comment
@MarkSetchell есть и другие варианты преобразования SVG в PNG, кроме Inkscape, например ImageMagick, но они часто отображают его по-разному. Я хотел бы использовать Inkscape для этого. Это также означает, что xml, специфичный для Inkscape, будет понят.   -  person feedMe    schedule 25.03.2021


Ответы (2)


Один из подходов, который я нашел, заключался в использовании интерактивного режима --shell с такой последовательностью действий и команд:

inkscape --shell
> file-open:file001.svg;export-filename:file001.png;export-do; file-open:file002.svg;export-filename:file002.png;export-do;

Вы можете создать длинный список этих последовательностей действий и глаголов, по одному для каждого файла. Это работает очень хорошо, но, к сожалению, мне не удалось вставить достаточно большую текстовую строку для тысяч файлов SVG, которые я хотел преобразовать. Я думаю, что Powershell ограничен объемом текста, который вы можете вставить в него, как обычная командная строка.

Поэтому было бы здорово, если бы будущая версия Inkscape принимала пакетный файл, содержащий такой список команд. В настоящее время это не представляется возможным, насколько я могу судить из документации.

person feedMe    schedule 19.02.2021

Следуя вашему собственному ответу, я создал файл из 10 000 строк с именем inkscape.cmd, который выглядит следующим образом:

inkscape-version
inkscape-version
inkscape-version
...
...

и запустил его с помощью:

inkscape --shell < inkscape.cmd

Я тестировал это только на macOS, так как у меня нет Windows.

person Mark Setchell    schedule 20.02.2021
comment
Это устроило тебя, хорошо? - person Mark Setchell; 23.02.2021
comment
Спасибо, но нет. По крайней мере, в Windows перенаправление файла в режим оболочки Inkscape работает неправильно. Я получаю сообщение об ошибке > Unable to find: file-open. Это работает, только если я перехожу в интерактивный режим оболочки и вставляю команды, как я сделал в своем ответе. - person feedMe; 25.03.2021