В Inkscape измените размер документа и его содержимого одновременно

25

Я изо всех сил пытался сделать что-то, что казалось бы довольно простым:

В Inkscape, как я могу одновременно изменить размер документа и его содержимого (т.е. чертежей)?

Немного контекста: я хочу изменить размер довольно большого количества документов SVG из The Noun Project (обычно это документы размером 100x100px) без необходимости явного изменения размера реальных чертежей.

NB: Если есть решение для командной строки, я тоже могу с этим работать!

julien_c
источник
Я не уверен в вашей конечной цели, но AFAIK, область документа несколько произвольна, кроме печати, где у вас есть возможность распечатать только область документа. Тем не менее, вы также можете печатать только область объекта, так что это может быть способом обойти препятствие.
DA01
@ DA01 Ну, я думаю, что документ очень полезен, когда вы экспортируете в Bitmap (что я и делаю).
julien_c
Кстати, есть ли способ изменить размер объекта, который не требует перетаскивания углов, но где вы бы явно указали размер? Это может быть то, что я после :)
julien_c
1
даже тогда это произвольный вариант. Вы можете так же легко нарисовать вмещающую рамку, как и ваша «зона экспорта». На самом деле, так я обычно предпочитаю это делать. Что касается изменения размера, вы можете выбрать ваши объекты, а затем либо: а) использовать строку состояния вверху и ввести изменения размера, либо б) перейти к OBJECT> TRANSFORM и ввести значения в палитре Transform
DA01
@julien_c: Я думаю, что дело здесь в том, что объекты являются прямыми векторными изображениями и не имеют размера как такового, пока вы не выведете их на растровое устройство (или файл). Их размер (дюймы, пиксели, локти), по сути, не имеет значения.
Горацио

Ответы:

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 с размерами 200 на 200 пикселей и сохранен как «original-file-name.new.svg»

Расчет размеров несколько сбивает с толку. Для преобразования SVG в SVG вам нужно немного по математике. В таких случаях параметры "height" и "width" в rsvg-convert используют pt, а не px, поэтому используйте 80, если вы хотите 100px, 120, если вы хотите 150px, и так далее.

Вы также можете использовать rsvg-convert для вывода 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-skewed».
Ананда Махто
@julien_c, просто продолжаю: пробовали ли вы это предложение и вам повезло с ним?
Ананда Махто
Скопируйте и вставьте код в терминал, но верните sed: -e выражение # 1, char 14: неопределенная команда 's' Отсутствует аргумент для -o ... Любые предложения
raphie
Я изменил `на ', и теперь я получаю сообщение об ошибке сохранения в файл: echo svgfile.svg | sed -e' s / svg $ / 2.svg '
raphie
Отлично - будет еще лучше, если librsvgисправлена ​​ошибка с
Joce
7

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

julien_c
источник
2

Хотя есть несколько способов сделать это - как отмечалось здесь, - один из способов, который может действительно хорошо работать, это использовать a 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