Я изо всех сил пытался сделать что-то, что казалось бы довольно простым:
Как в Inkscape изменить размер документа и его содержимого (например, рисунков) одновременно?
Немного контекста: я хочу изменить размер довольно большого количества документов SVG из The Noun Project (обычно это документы размером 100x100px) без необходимости явного изменения размера реальных рисунков.
NB: Если есть решение для командной строки, я тоже могу с ним работать!
Вы не указали, какая у вас ОС. Я использую 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 вам нужно немного посчитать. Параметры «высота» и «ширина» в rsvg-convert используют pt, а не px в таких случаях, поэтому используйте 80, если вы хотите 100 пикселей, 120, если вы хотите 150 пикселей, и так далее.
Вы также можете использовать 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
rsvg-convert
как таковой: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svg
который возьмет исходный файл с именем «noun_project_1576», искажает его до размера 400 на 200 пикселей и переименовывает его в «noun_project_1576-skewed».librsvg
исправят ошибку 's flowed text...rsvg-convert "attachment-12.svg" -w 32 -h 32 -f svg -o "attachment-12-new.svg"
Теперь мой новый SVG имеет такой заголовок: <svg ... xmlns:xlink="http://www.w3.org/1999/xlink" width="32pt" height="32pt" viewBox="0 0 32 32" version="1.1">
Указание px
в преобразовании не действует. На самом деле в моей версии ошибки rsvg-convert, если вы добавите px
спецификатор единицы измерения. Какой впечатляющий провал. Кто-нибудь знает обходной путь?В настоящее время в Inkscape нет собственного способа сделать это. Единственный способ — изменить размер содержимого и документировать отдельно.
Хотя есть несколько способов сделать это, как указано здесь, один из способов, который может работать очень хорошо, — это использовать файл viewBox
. Вы просто изменяете содержимое тега SVG следующим образом:
<svg
width="1280"
height="800"
viewBox="0 0 1280 800">
<!-- More markup... --!>
</svg>
Что viewBox
делает, так это определяет внутреннюю систему координат для документа. Затем вы можете легко масштабировать документ, просто изменяя атрибуты width
и по мере необходимости.height
Однако обратите внимание, что есть некоторые недостатки. Во-первых, это работает только в определенных контекстах, особенно если вы каким-то образом напрямую включаете документ SVG на свою страницу разметки. Использование <img>
тега с этим может привести или не привести к неожиданным результатам. Вам придется провести собственное исследование, чтобы выяснить, как лучше всего это сделать.
Я искал способ сделать это, и я привык использовать блокнот ++ для не совсем похожих вещей, но вроде так казалось, используя обычный поиск / замену, я мог изменить «в файлах» или открыть их все, если не тысячи, и найти свой рост и ширина, которая для меня составляла 100 пикселей, но окно просмотра было немного более раздражающим, поскольку значки из thenounproject имели разные значения, выполняя замену поиска с использованием выражений регулярных выражений в первую очередь для обычных чисел.
Найдите что: viewBox=\"[\d ]*\"
заменить viewBox="0 0 512 512"
на (или на то, что вы хотите, чтобы числа были).
Затем были некоторые еще более раздражающие числа с десятичными точками, например, 96,987 (метатели), так что
Найдите что: viewBox=\"[\d. ]*\"
Замените на: viewBox="0 0 512 512" (или любые числа, которые вы хотите видеть)
Вероятно, это не традиционный способ изменения свойств изображения, но SVG - это XML-файлы, по сути, как я знаю, это заняло около 5 минут, чтобы найти замену строк внутри кавычек и 5 минут, чтобы сделать это в блокноте ++. Надеюсь, это может помочь кому-то.
Порекомендуйте сделать резервную копию ваших файлов, прежде чем делать что-либо из вышеперечисленного, так как нет простого способа отменить, если вы запутались (или вообще, если вы меняете «в файлах»).
Что я сделал, так это сначала изменил ширину и высоту, умножив их на 10 в свойствах документа,
Затем перейдите в «Правка»> «Редактор XML» и добавьте масштаб преобразования (10, 10) к корневому элементу,
Затем нажмите, например, на «Путь»> «Объединение», чтобы Inkscape действительно применил конкретное преобразование к пути.
Думаю, это не так, как это должно работать, но я просто хотел помочь себе в следующий раз, когда мне это понадобится, как я сделал это однажды раньше и забыл на мгновение, и поэтому я разместил его здесь, который, надеюсь, будет полезен и другим: )
DA01
жюльен_с
жюльен_с
DA01
Горацио
жюльен_с
Горацио
Цвайске