15

SVG имеет эти свойства, которые определяют его размер:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

Я хотел бы масштабировать данный SVG до 400pt в командной строке, не нарушая соотношения сторон. Это означает, что три значения, указанные выше, должны быть изменены правильно, и все точки в следующем коде SVG. Я не хочу изменять только размер холста, но весь размер изображения SVG. И я не хочу делать это с помощью GUI/ вручную, но я хочу сделать это с помощью CLI.

Как я могу автоматически масштабировать SVG с помощью командной строки до заданной ширины?

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

Как бы я сделал эту задачу с Inkscape-GUI

  1. Shift+Ctrl+M (Преобразовать)
  2. Шкала (отметьте "пропорционально масштабировать")
  3. Введите ширину
  4. Shift+Ctrl+D (Свойства документа)
  5. Подогнать страницу к выбору

Теперь я хочу автоматический CLI-способ сделать это.

Кстати, Inkscape просто применяется

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">

на весь образ.

2 ответа2

12

rsvg-convert из librsvg2-bin может изменить размер svg.

Смотрите этот ответ для полных инструкций.

2

Если вы просто хотите изменить одно изображение, откройте его в текстовом редакторе (например, emacs) и измените ширину записи.

Для тех, кто любит работать с CLI, используйте sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

Это не будет масштабировать изображение, а только установить его ширину.


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

$ inkscape -z -e out.png -w 400 -h 400 in.svg

Для многих файлов (при условии, что вы хотите, чтобы все они имели одинаковую ширину), выполните следующие действия. Это требует преобразования в png и предполагает, что в ваших именах файлов нет пробелов:

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done

Преобразование ImageMagick было моим первым выбором, но, похоже, он ломается при масштабировании svgs.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .