У Inkscape змініть розмір і документа, і його вмісту одночасно


25

Я намагаюся зробити щось, що здавалося б досить базовим:

Як я можу одночасно змінити розмір документа та його вмісту (тобто малюнків) у Inkscape?

Трохи контексту: я хочу змінити розмір досить великої кількості SVG-документів у проекті Noun (зазвичай це документи 100x100px) без чіткого зміни розміру фактичних малюнків.

NB: Якщо є рішення командного рядка, я теж можу працювати з цим!


Я не впевнений у своїй кінцевій цілі, але AFAIK, область документа дещо довільна, крім друку, де у вас є можливість друкувати лише область документа. Однак ви також можете роздрукувати лише область об’єкта, так що це може бути спосіб обійти ваші перешкоди.
DA01

@ DA01 Ну, я вважаю, що документ дуже корисний, коли ви експортуєте в Bitmap (це те, що я роблю).
julien_c

До речі, чи існує спосіб змінити розмір об'єкта, який не передбачає перетягування кутів, але де ви чітко вказали б розмір? Це може бути те, про що я
пішов

1
навіть тоді це довільний варіант. Ви можете настільки ж легко намалювати поле, що містить, як експортовану "зону". Насправді саме так я зазвичай вважаю за краще це робити. Що стосується зміни розміру, ви можете вибрати свої об'єкти, а потім або а) скористатися рядком стану у верхній частині та ввести зміни розміру, або b) перейти до OBJECT> TRANSFORM та ввести значення на піддоні Transform
DA01,

@julien_c: Я думаю, що тут справа в тому, що об'єкти - це прямолінійне мистецтво і не мають такого розміру , поки ви не виведете їх на растровий пристрій (або файл). Їх розмір (дюйми, пікселі, ліки) фактично не має значення.
horatio

Відповіді:


24

Ви не згадали, яка ОС працює. Я використовую Ubuntu, і мені вдалося успішно використовувати librsvg2.

Якщо у вас є доступ до Ubuntu, ось що ви можете зробити. Спочатку встановіть librsvg2:

sudo apt-get install librsvg2-bin

Потім cdдо каталогу, у якому є ваші SVG-файли (переконайтеся, що в ньому є лише SVG-файли!), І скористайтеся командою на зразок наступного:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Це створить нову партію SVG з розмірами 200px на 200px і збережеться як "original-file-name.new.svg"

Обчислення розмірів дещо заплутано. Для перетворення SVG в SVG вам потрібно зробити трохи математики. Параметри "висота" та "ширина" в rsvg-конвертації використовують pt, а не px, в таких випадках використовуйте 80, якщо ви хочете 100px, 120, якщо ви хочете 150px тощо.

Ви також можете використовувати rsvg-конвертувати для виведення PNG. Це набагато краще при раструюванні файлу, ніж ImageMagick, принаймні з мого досвіду. Зверніть увагу , що вам потрібно змінити -fдо png, вам потрібно змінити вихід Зберегти шаблон від 's/svg$/new.svg/'до 's/svg$/png/', і ви входите в ширину і висоту , що ви хочете в якості значень пікселів.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done

До речі, я просто припускаю, що вам потрібно це робити в пакетному режимі для великої кількості SVG. Якщо ні, то ви все ще можете скористатися rsvg-convertяк такою: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgяка візьме вихідний файл під назвою "noun_project_1576" і перекосить його на 400px на 200px та перейменує його на "noun_project_1576".
Ананда Махто

@julien_c, лише слідкуючи за цим: ви спробували цю пропозицію і чи пощастило з нею?
Ананда Махто

Скопіюйте та вставте код у термінал, але поверніть sed: -e вираз №1, char 14: unterminted 's' команда Відсутній аргумент для -o ... Будь-які пропозиції
raphie

Я змінив `на ', і тепер я отримую помилку при збереженні файлу: echo svgfile.svg | sed -e' s / svg $ / 2.svg '
raphie

Чудово - буде ще краще, коли librsvgвиправлена ​​помилка з текстовим текстом ...
Joce

7

Наразі в Inkscape немає рідного способу зробити це. Єдиний спосіб - змінити розмір вмісту та документа окремо.


2

Хоча є декілька способів зробити це - як зазначалося тут - один із способів, який може працювати дуже добре, - це використовувати viewBox. Ви просто змінюєте вміст тегу SVG так:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

Що viewBoxце робить, визначає внутрішню систему координат документа. Потім ви можете легко масштабувати документ, просто змінивши widthта heightатрибути за необхідності.

Зауважте, що є деякі недоліки. З одного боку, у цьому працює лише певний контекст, особливо якщо ви якось безпосередньо включаєте SVG-документ на свою сторінку розмітки. Використання цього <img>тегу може або не дасть несподіваних результатів. Вам доведеться зробити кілька власних досліджень, щоб зрозуміти, як найкраще це зробити.


2
Це не працює для мене, і я не розумію, чому. Якщо я редагую ширину та висоту, але залишаю viewBox таким, яким є: Коли Chrome надає необроблений SVG-файл, він показує лише невелику частину вмісту. Коли Inkscape відображає його, він показує весь вміст, але його набагато більше, ніж на сторінці, що є тією ж маленькою (верхньою лівою) частиною, яку показав Chrome. Отже, взагалі: вміст не масштабується відповідно до координат вікна. У моєму SVG є кілька дочірніх SVG елементів, але всі вони трансформуються на основі (я припускаю) координат вікна перегляду.
CPBL

Працював для мене в Inkscape 0.92.3, Firefox 66 та Chromium 73.
Socowi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.