Какую библиотеку я могу использовать для манипулирования файлами SVG? - PullRequest
1 голос
/ 24 августа 2010

Я ищу библиотеку, которая позволит мне выполнять графические манипуляции с файлами SVG. Под «манипуляциями» я подразумеваю такие вещи, как:

  • Объединение двух перекрывающихся фигур в одну фигуру
  • Найдите геометрический центр фигуры
  • Нарисуйте копию фигуры, которая составляет 25% от размера оригинальной фигуры

... и другие виды вещей, которые можно делать в Illustrator.

Мне нужно построить процесс, который может автоматизировать такого рода задачи и выполнять их на сотнях файлов SVG. Я понимаю, что мог бы написать сценарии для автоматизации подобных вещей в Illustrator, но мне нужно запустить это на удаленной машине и не могу полагаться на наличие работающего экземпляра Illustrator.

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Я не знаю библиотеку, которая непосредственно отвечает перечисленным вами требованиям, но я думаю, что эти вещи не составит труда написать в сценарии, просто используя SVG DOM.

Для первого задания кажется, что проще всего было бы просто сгруппировать две фигуры.


var shape1 = document.getElementById("shape1");
var shape2 = document.getElementById("shape2");
var newG = document.createElementNS(svgNs,"g");
shape1.parentNode.removeChild(shape1);
shape2.parentNode.removeChild(shape2);
newG.appendChild(shape1);
newG.appendChild(shape2);

Для второго задания вы можете просто получить ограничивающий прямоугольник формыи найдите центральную точку этого.


var bbox = shape1.getBBox();
var centrePoint = {x:bbox.x + bbox.width/2, y:bbox.y + bbox.height/2};

Для третьего задания вы можете скопировать фигуру, а затем применить к ней масштабное преобразование.


var shape1Clone = shape1.cloneNode(true);
shape1Clone.setAttributeNS(null,"transform","scale(.75)") 

Для автоматизацииЭто позволяет запустить его на удаленной машине, использовать библиотеку Apache Batik и выполнять сценарии с помощью Rhino.Посмотрите на это для примера, как это сделать:

0 голосов
/ 24 августа 2010

Одна из библиотек Qt имеет схожую функциональность, и вы, вероятно, можете выполнять с ней большинство операций преобразования:

Qt SVG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...