У меня есть изображения SVG, созданные PlantUML, у которого есть некоторые части рисунка вне холста. Это затрудняет использование таких изображений, и мне нужно обрезать рисунок до размера холста. Так как я в любом случае создаю UML-диаграммы со сценарием, было бы действительно эффективно выполнять обрезку там же.
До сих пор я пробовал две вещи: а) изменить размер холста для рисования с помощью Inkscape
inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg
Это работает нормально, но мне нужно обрезать рисунок до размера холста, и эта операция кажется недоступной.
б) изменить размер с помощью rsvg-convert
rsvg-convert image.svg -w 1870 -h 1195 -f svg -o image.svg
Это точно обрезает до желаемого размера, но размер изображения увеличивается ~ в 10 раз, так как теперь есть некоторые двоичные изображения, встроенные в SVG. Это не приемлемо для меня.
svg
format - это основанный на xml формат ascii, поэтому самый простой способ - просто использоватьsed
или ваш любимый инструмент для работы с текстом, чтобы вставить или изменить строку, которая устанавливает ограничивающий прямоугольник. Это даже не коснется другого содержимого файла. Попробуйте сделать это вручную один раз на примере файла SVG (в текстовом редакторе), а затем переведите свои действия в сценарий.Ответы:
Я нашел неумелый способ сделать это, используя предложение Ориона. Предполагается,
$svg_file_name
что это переменная, содержащая путь к файлу SVG-изображения.Сначала нам нужны ширина и высота изображения
PlantUML создает диаграмму в виде одной группы (тега
<g>
), давайте поместим прямоугольник размера холста поверх этой группыТеперь откройте изображение с помощью Inkscape, выделите все и обрежьте группу прямоугольником
В последней версии Inkscape нужно закрыть Inkscape, а не закрывать файл
источник