LINUX.ORG.RU

resvg 0.4 — библиотека отрисовки SVG

 , ,


1

4

resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.

Основные изменения:

  • Добавлена начальная поддержка фильтров.

    Поддерживаются feBlend, feComposite, feFlood, feGaussianBlur, feImage, feMerge, feOffset и feTile.

    Сравнительная таблица.
  • Добавлена поддержка вложенных clipPath и mask.
  • Улучшена обработка атрибутов видимости (display, visibility), которые очень плохо поддерживаются.
  • Улучшена поддержка условной отрисовки. В частности добавлена поддержка атрибута systemLanguage.
  • Добавлена поддержка XML namespaces при разборе SVG.
  • Добавлено 180 новых тестов. Общее количество достигло 815-и.
  • Множество мелких изменений и исправлений.

Результаты тестирования. Сравнительная таблица. Неполный список нереализованных возможностей.

Также стоит упомянуть утилиту usvg, которая используется в resvg для упрощения SVG. Её можно использовать независимо от resvg.

Отдельное спасибо Serg_HIS за помощь в написании фильтра размытия IIR.

>>> Подробности

★★★★★

Проверено: jollheef ()
Последнее исправление: Deleted (всего исправлений: 4)

А код выглядит хорошо и прозрачно, что редко вижу на Rust. Мне прямо понравился.

Это по сути прослойка для Cairo и Qt?

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

Код далеко не идеален, увы.

Прослойка? Разве что между svg и отрисовкой. Ибо Qt/cairo нельзя использовать напрямую для отрисовки svg.

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

Ибо Qt/cairo нельзя использовать напрямую для отрисовки svg.

А, теперь понял зачем оно. То есть из Qt/cairo используются только примитивы для непосредственной отрисовки, так?

Deleted
()

Спасибо что вспомнил про меня.

Я предлагал тебе оптимизированный вариант, который в 4 раза быстрее, но ты мне не ответил.

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

Да. Но там больше ничего и нет. clippath, mask, marker, text layout, filters - это всё нужно руками реализовывать. Тот же cairo даже дуги не поддерживает. И я молчу про пердолинг с самим SVG/XML.

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

ТЗ дай как по размытию

Я как будет время (думаю после НГ) сделаю

Сейчас свой проект до НГ допиливаю.

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

Это по сути прослойка для Cairo и Qt?

Оно транслирует SVG (который по сути является XML) в Cairo surface, или как оно там называется. Грубо говоря.

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

Ну с box blur мне помощь не нужна, спасибо.

RazrFalcon ★★★★★
() автор топика

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

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

в самих браузерах напрямую SVG никто не дергает

Дёргают. В основном это иконки вместо фонтавесомов, свг хмл сразу в разметке хтмл.

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

xform?

Что характерно, librsvg, который тоже cairo использует, тоже конвертирует в кривые и уже их рендерит.

Я с дугами возился полтора года назад. Уже не помню почему стандартная реализация не подошла.

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

Ну, мы тут и по-русски поймём. Ведь разработчик имеет право создать ЧАВо только на родном языке и предложить, пожалуйста, переводите. Ведь есть люди, которые не программируют, но охотно помогают подобным проектам чем могут, например, переводом.

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

xform?

Матрица трансформации. У каиры arc только круглая, чтоб сделать разные rx/ry надо растягивать. Ну и поворот туда же.

Наверное конвертировать всё в безье проще чем разбираться с каировскими заморочками. А в случае поворотов может и быстрее.

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

Чуваг. Давай уже допилим твой СВГ. Я даже уже начал пилить с тобой.

Шота долго пилится.

Я не в укор. Дай ТЗ. Я Запилю.

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

Мне помощь на данный момент не нужна.

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

Пиши не простыни. Простыни и читать сложно... Качество количеством не определяется.

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

Как раз предполагаемый чаво для программистов. Когда это не программисты начинают переводить, такая фигня получается. У нас, например, таланты desktop после двойного перевода превратили в working table.

anonymous
()

Добавлена поддержка вложенных clipPath и mask.

У тебя в апрельском релизе было :

(svg) Partial clipPath support.
(svg) Partial mask support.
(svg) Partial pattern support.

В новом релизе:

(resvg) Nested clipPath and mask support.

А что сделать-то осталось?

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

Именно для этих трёх? Там нужно с вложенным objectBoundingBox разобраться и реализовать LinearRGB для маски. Но так как это всё равно мало кто умеет - я не спешу.

Подробности: clipPath, mask, pattern

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

Мож, этим https://gitlab.gnome.org/GNOME/librsvg/ нужна будет помощь?

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

Хотя если посмотреть на время сборки librsvg, то после перехода на rust там кошмарная деградация. Как по времени, так и занимаемому пространству. Сотни процентов. А вот чего они выиграли и на сколько процентов - на глаз и не видно.

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

У нас, например, таланты desktop после двойного перевода превратили в working table.

Не удивительно. Несколько последовательных переводов работает как испорченный телефон.

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

Странно, но resvg что-ли в игноре.

resvg слишком молодой. Нужно 1.0 ждать.

Но да, Гному нужна полная совместимость API, иначе никто перелазить не будет. А это нереально.

Кстати да. Там размер либы раздуло до безобразия:

~> du -h /usr/lib64/librsvg-2.so.2.40.18
220K
~> du -h ./librsvg-2.so.2.45.1 
8.0M

При этом resvg 1.2M

Зато поддержку SVG улучшили прилично. Всё ещё довольно плохо, но уже намного лучше. Правда из-за переезда на раст, в той же генту до сих пор Си версия.

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

8.0M

Это они туда демо-видео втулили что ли?

Я тут свою игру пишу под ведроид со своим графическим движком. Вполне солидно получается на вид, но прога целиком меньше 10 мегов. Это с музыкой и с кучей 4К картинок для уровней. Сам код меньше 10К наверное. В начале разработки когда было запилено больше половины и почти весь движок около 7К было.

Serg_HIS
()

И зачем это нужно? Ладно бы на Си была написана.

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