LINUX.ORG.RU

Либа для редактирования SVG

 , , ,


0

3

Есть ли готовые библиотеки для мышечного редактирования SVG?

В идеале — некая сишная или плюсовая либа, ну или часть приложения которую можно будет легко выковырять, которая наиболее простым способом добавится в проект и в гуйчике можно будет быстро прикрутить готовое визуальное отображение path'ей и прочего где можно это все крутить мышкой.

В худшем случае — просто SVG либа с нормальным апи. Тут уж гуй придется делать самому.

Рад буду получить любой пинок в правильном направлении для поиска и изучения этого вопроса.

Нет.

где можно это все крутить мышкой

Какие конкретно нужны операции?

отображение path'ей и прочего

В спеке SVG Full 1.1 80 элементов и 271 аттрибут. Догадываетесь сколько будет весить такая либа?

Ну и гуй подразумевает привязку к тулкиту.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

В идеале, конечно же, все операции. Но в худшем случае я сразу набросаю то, что очень критично (это кривые и их заливка), а далее потихоньку добавлять придется.

Не только догадываюсь, но и понимаю. Потому и спрашиваю. Вдруг есть готовое или частично покрывающее мои потребности наименьшей кровью с моей стороны.

deep-purple ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А просто либа которая может прочитать/записать свг картинку, показать и предоставить апи для чтения/записи значений координат и атрибутов?

Блин, это ж XML. Ну допустим, да. А как её показывать то (рендерить на экран)?

Хм https://www.cairographics.org/

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 2)

нету и сделать это очень сложно

в томже инскейпе над этим бились бились и накатали 300мб исходников

lwx51033 ()
Ответ на: комментарий от deep-purple

апи для чтения/записи значений координат и атрибутов?

svg это xml с тем что ты написал-любая дефолтная xmllib справиться-банально распарсить теги

А просто либа которая может прочитать/записать свг картинку

прочитать-показать полно

записать....с чего? тебе нужно АГЛОРИТМ для записи-для добавления новых эелементов для редактирования старых(добавления узлов к старым(а элементы на картинке могут пересекаться,и нарисованы слоями в СВГ а ты искривил или смешал их и нужно слои целиком смешивать или делать третий слой вырезая смешаное))

вобщем для редактирования SVG нужен исскустенный интелект,но сейчас есть только скриптовый-интеллект,и опятьже в томже инскейпе накатали 300мб скриптов для разных ситуаций редактирования СВГ
но все еще инскейп для 90% случаев выдает 130мб свг на выходе из попиксельных путей и цветов к ним

lwx51033 ()
Ответ на: комментарий от lwx51033

чтоб редактировать свг нужно накатать шаблонов на все возможные эелементы и изгибы,иначе-попиксельные пути(и ад с закрашиванием областей-ух)

такого еще не сделали

lwx51033 ()

любой виджет а-ля канва де-факто умеет некоторое подмножество SVG (аналогичные элементы, схожие атрибуты, что-то может эмулироваться). Конечно вопрос - достаточно-ли такого подмножества для ваших целей. Написать экспорт/импорт в XML не то чтобы сложно, но может быть муторно :-)

для любимого Tk такое всякое подобное (см http://wiki.tcl.tk/2893) было ещё хрен знает когда. Для модно-молодёжных Qt,Gtk тоже просто обязано где-то быть, если там есть канвасы с векторами.

update: вот ещё, тоже на Tk, но совсем почти то что вам надо http://tclbitprint.sourceforge.net/

MKuznetsov ★★★★★ ()
Последнее исправление: MKuznetsov (всего исправлений: 1)

dia умеет писать в svg. Посмотри чем она это делает и легко ли будет выковырять это из неё

Pinkbyte ★★★★★ ()
Ответ на: комментарий от deep-purple

Это не так просто, как кажется. Говорю как человек, который пишет svg рендер.

И да, это не XML.

У меня есть нужные либы, но они на rust. В качестве рендера использую cairo, ибо больше ни для чего биндингов пока нет.

Я напоминаю, что «просто заливка» - это цветом. Еще есть заливка градиентом, для реализации которой нужно под 1к кода накатать, ибо там хитрости с матрицами трансформаций + нужна валидация градиентов.

Для примера, rsvg, который на троечку, но лучше нету, занимает почти 20к строк на сишке, и всё что от делает, это импортирует данные через libxml2 и скармливает их cairo. То есть упомянутый вами парсинг XML и сама отрисока - это мелочи.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от MKuznetsov

любой виджет а-ля канва де-факто умеет некоторое подмножество SVG

Только сказочно примитивный.

Написать экспорт/импорт в XML не то чтобы сложно

Один разбор атрибута d займёт под 200-300 строк. А там еще другие атрибуты есть.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

разбор атрибута d

Там не очень сложно и даже есть откуда стырить. Но естественно, хотелось бы готовое. Но если говорить о других атрибутах, то да, сложности есть.

deep-purple ★★★★★ ()
Ответ на: комментарий от lwx51033

тебе нужно АГЛОРИТМ для записи-для добавления новых эелементов для редактирования старых(добавления узлов к старым

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

deep-purple ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Первая попавшаяся онлайн смогла только «M», а «А» и далее проигнорировала.

deep-purple ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Ах вот почему такой интерес к вопросу. Круто! Я обязательно поковыряю! Спасибо!

deep-purple ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Если бы делал я, то после парсинга я получал бы некую древовидную структуру, которая удобна внутри приложения и для отрисовки и для модификации и для трансляции обратно в свг. Смущает только, что там может все сильно прибито гвоздями и приклеено соплями к самому приложению. Я посмотрю.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

ты вообще знаеш что такое свг,координат ыточек слоев цветов как описаны эти координаты в синтаксисе

это ад

вот и есть inscape где и реализовали гдето 10% из возможных шаблонов и если ты начинаешь рисовать не гладкими кривыми и прамыми а соечтаниями еще и кусками кругов-вся твоя картинка станет набором точек в СВГ весом по 100мб+(бывают и гигабайты)

поэтому все свг пишут только ручками

lwx51033 ()
Ответ на: комментарий от lwx51033

Это просто XML + спецефичный CSS. Уж парсеры на это дело должны быть. А если есть парсер, то в какую-то структуру данных он это парсит в память. Вот отсюда можно и плясать. В приложении же просто следить за мышью и если есть интерактив с перетаскиванием узла, то модифицировать в нем значения координат, перерисовывать картинку. Как-то так.

Куски кругов и прочее меня не интересуют. Мне будет достаточно примитивов, патчей и заливки замкнутых фигур цветом или бекграундом, плюс что-то для перекрытия слоев.

Я спрашивал если есть готовые по полным спекам — хорошо. Если нет, то хрен с ним, уж примитивы будут много где.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

все верно

за 17 лет существования свг так и не сделали векторный редактор,конечноже причиной является то что все дураки

все правильно

Мне будет достаточно примитивов, патчей и заливки замкнутых фигур цветом или бекграундом, плюс что-то для перекрытия слоев.

за 10 лет разработки инскейпа,вот это одно предложение твое-так и не смогли сделать и просто накатали 300мб исходников,,а знаешь почему?
они просто дураки,ну туппппппппппппыыыыыыыыееееееее,понимаеш-вот же тупые,вотже

lwx51033 ()
Ответ на: комментарий от deep-purple

Это просто XML + спецефичный CSS

Нет. Это XML + самый обычный CSS (по стандарту только CSS 2.1, но браузеры реализуют любой) + JavaScript(да, есть тег script) + навороты самого SVG(типа анимаций, свитчей и прочего).

RazrFalcon ★★★★★ ()
Ответ на: комментарий от lwx51033

накатали 300мб исходников

Упорот? Сорцы инкскейпа весят 20 мегабайт с копейками. Все остальное - файлы для тестов, картинки, переводы и прочая лабуда.

peregrine ★★★★★ ()

Ковыряй сорцы инкскейпа, а конкретно:

2geom и svg директории в src. Не даю гарантий, что там всё что тебе нужно, но большая часть должна быть именно там.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Это какой-то не обычный CSS т.к. декларации специфичные. Синтаксис то обычный.

Но мне все навороты и не нужны. Я не собираюсь импортировать какие-то мега картинки с мега наворотами. Я хотел бы взять то что уже спецификации имеет, дабы не изобретать велосипеды. И чтобы в просмотрщиках и других редакторах открывались те примитивы которые будут делаться в моем приложении.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

То, что реализовал автор (сорцов я так и не увидел), я реализовал за пару дней в своём libresvg. Но это даже не 1% от всех фич svg.

Как я уже писал: рисование примитивов и заливка их цветом - простая задача. Всё остальное - ад.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от deep-purple

used to render cairo graphics to SVG

и где там сохранение в свг нука покажи

lwx51033 ()
Ответ на: комментарий от RazrFalcon

Как я уже писал: рисование примитивов и заливка их цветом - простая задача. Всё остальное - ад.

Кстати, как по-вашему, всё остальное проще однозначно нельзя было специфицировать или создатели стандарта перемудрили? Зачем же такой стандарт, если никто (даже мировые концерны) не в состоянии его полностью реализовать? Стандарт же не вчера появился.

gag ★★★★★ ()
Ответ на: комментарий от gag

Я считаю, что стандарт без референсной реализации не нужен. И SVG тут не при чём, это касается и CSS, HTML да и того же C++.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Согласен: будь у авторов стандарта всегда обязанность написания образца реализации, они вынуждены были бы серьёзней подходить к своей работе. Насколько я понимаю, именно SVG - хороший пример, другим стандартам, ведь, повезло больше. Или если он как стандарт не хуже написан, чем CSS,..., то, это может только значить, что он просто наименее нужный по сравнению с остальными.

gag ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.