Як я можу масштабувати SVG за допомогою командного рядка?


17

SVG має ці властивості, які визначають його розмір:

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

Я б хотів масштабувати заданий SVG на з 400ptкомандним рядком, не порушуючи співвідношення сторін. Це означає, що три вищевказані значення потрібно правильно змінити, і всі точки в наступному svg-коді. Я не хочу змінювати лише розмір полотна, але і весь розмір зображення svg. І я не хочу це робити з графічним інтерфейсом / вручну, але хочу це робити з 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">

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


Яку ОС ви використовуєте?
тердон

Ubuntu 10.04.4 LTS (я збираюся його оновити ...)
Мартін Тома

SVG-файли - це лише текстові файли. Ви можете редагувати цей файл і змінити width, heightі viewBoxзначення до чого - щось на зразок width="100%" height="100%" viewBox="0 0 400 212.58569".
мартіно

Я знаю, що це лише текстові файли. Але якщо я редагую лише ці значення, розмір зображення не змінюється. Змінюється лише розмір полотна. Редагування вручну - це не варіант, я прямо заявив, що хочу змінити його автоматично.
Мартін Тома

Так, я знаю, що ви попросили автоматизований спосіб зробити це, але подумали, що якщо ви зможете зрозуміти, що потрібно змінити, текстово, то ви можете автоматизувати це за допомогою будь-якого з ряду доступних інструментів редагування тексту (таких як sedу відповіді @ terdon). Одна з проблем, з якою ви можете зіткнутися, полягає в тому, що значення значень можуть відрізнятися від будь-яких інших файлів .svg, з якими ви хочете зробити те саме.
мартіно

Відповіді:


15

rsvg-convertз librsvg2-binпакету можна змінити розмір svg.

Дивіться цю відповідь для повних інструкцій.


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgпрацювали. Але, схоже, rsvg-перетворення робить більше, ніж лише зміна розміру.
Мартін Тома

2
@moose, однак, як зазначено у цій відповіді, rsvg-convert використовує точки, а не пікселі. Якщо вам пощастить, ви можете просто розділити призначений розмір на 1,25. Однак якщо ви хочете щось на кшталт 24 пікселів (19,2 в балах), вам не пощастило, оскільки не бажає ставити не ціле число як ширина або висота (не впевнений, чи дозволяє SVG це).
Метью Флашен

@MartinThoma Так, справді. Вихідний файл SVG приблизно вдвічі перевищує вихідний розмір. Цікаво, чому? Читання rsvg-convert --helpне дає жодних підказок.
Серж Стройбандт

1
rsvg convert також, здається, перетворює обведені шляхи у окреслені контури. Можливо, ви цього не хочете (я знаю, що це не так)
scruss

1
Цей інструмент просто здається, що варення перетворюється на кожен елемент і фактично не змінює початкові розміри.
rtaft

3

Якщо ви просто хочете змінити одне зображення, відкрийте його в текстовому редакторі (наприклад, 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.


7
Ваша команда inkscape приводить до PNG, але я хочу SVG. Ваша команда svg змінює лише розмір полотна, але не розмір зображення. Ви не можете просто скористатися текстовим редактором і змінити лише ті значення, про які я згадував вище. Я думаю, що я повинен уточнити питання.
Мартін Тома

Вам також потрібно додати тег: ... "> <g transform =" scale (2) "> <path .... /> </g> </svg> для масштабування зображення з тим же фактором.
Стофке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.