LINUX.ORG.RU

resvg 0.3 - библиотека отрисовки SVG

 ,

resvg 0.3 - библиотека отрисовки SVG

4

6
  • Добавлена поддержка расширенной разметки (advanced layout) текста (списки x, y, dx, dy, rotate). Примеры: 1, 2.
  • Добавлена поддержка элемента symbol.
  • Добавлена поддержка вложенных svg элементов.
  • Добавлена поддержка парсинга элементов из ENTITY.
  • Добавлена поддержка fallback цветов для типа paint. Пример: fill="url(#lg1) red"
  • Добавлена возможность отрисовки внешних и встроенных SVG(Z) файлов.
  • Добавлен Qt-враппер для C-API. Повторяет API и поведение QSvgRenderer.
  • Добавлено почти 100 новых тестов. Всего 634 теста.
  • Множество исправлений.
  • Снижен размер библиотеки. rendersvg с cairo бекендом теперь на 34% меньше, с Qt бекендом - на 19%.
  • Минимальная версия Rust снижена с последней стабильной до 1.22.

Ещё не реализовано:

  • Элементы: filter, marker, textPath.
  • Редко используемые атрибуты.

Результаты тестирования. Сравнительная таблица.

Если исключить dynamic SVG subset, фильтры и маркеры - resvg предоставляет лучшую поддержку SVG среди всех кроссплатформенных, FOSS библиотек. И, в том числе, является самой быстрой реализацией.

>>> Репозиторий

★★★★★

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

Ответ на: комментарий от q0tw4

Можно же просто сконвертить её в растр любимым редактором перед использованием

И при необходимости масштабировать растр?

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

RazrFalcon готов убить 5-10 лет жизни на такое? ;)

Если я правильно понимаю, сложная часть - это работа с текстом, а она должна уже быть в Pathfinder. так что не 5-10, а 2-3 %)

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

Свою 2D либу я писать не собираюсь.

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

Если я правильно понимаю, сложная часть - это работа с текстом

Не, имелось ввиду свой аналог cairo на OpenGL: там текст надо сначала в кривые перегнать. Это на уровне либ аля Pango и OpenGL тут не помошник. А вот все детали имплементации кривых Безье со всеми необходимыми опциями заливки/обводки - это займет немало времени.

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

там текст надо сначала в кривые перегнать. Это на уровне либ аля Pango и OpenGL тут не помошник

Именно в кривые, растр не подойдет?

А вот все детали имплементации кривых Безье со всеми необходимыми опциями заливки/обводки - это займет немало времени.

Опять же, если я правильно понимаю, в Pathfinder это всё и сделано.

P.S. https://github.com/pcwalton/pathfinder

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

Именно в кривые, растр не подойдет?

Нет. Нужен доступ к тексту как к кривой Безье/векторной фигуре.

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

Я использую lyon_geom для матана, но сама либа мне не нужна. Это тупо теселлятор путей. При этом очень сырой. К SVG он никакого отношения не имеет. Хз почему о нём всегда спрашивают.

PS: lyon, в свою очередь, использует resvg/usvg для демок.

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

Опять же, если я правильно понимаю, в Pathfinder это всё и сделано.

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

Linfan ★★★★★
()
Ответ на: комментарий от quantum-troll

примитивы → пути

Это даже не 1% SVG.

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

блин, картинка выглядит отвратно. Ссылка на скриншот с надписью «скриншот» выглядит лучше.

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

это к uBlock'у:

www.linux.org.ru##.medium-image-container

И даже грузить не будет, по идее, не то что отображать.

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

И значок категории уехал хрен знает куда.

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

И при необходимости масштабировать растр?

Запаковать в максимальном из разумных разрешений, а потом уменьшать

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

сложная часть - это работа с текстом

Всё прогрессивное человечество рендерит все буквы в текстуру например с помощью freetype, а потом просто натягивает рисуночек на квадрат. Исключением будут svg шрифты, но для них, думаю, хватит той части бекэнда, который рендерит остальной svg (в смысле их можно сделать чисто на уровне фронтэнда)

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

масштабировать растр?

Запаковать в максимальном из разумных разрешений, а потом уменьшать

Тоже артефакты.

Всё прогрессивное человечество рендерит все буквы в текстуру например с помощью freetype, а потом просто натягивает рисуночек на квадрат

Так поступает уж точно не всё прогрессивное человечество. Пример выше.

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

Как вы собираетесь менять цвет контура у текстуры?

Текстура - это чистый альфа канал. Умножается на цвет и вуаля. Ибо все шрифты (кроме svg-шных) по определению одноцветные. Ну есть еще тень, но её можно нарисовать отдельным проходом.

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

Ибо все шрифты (кроме svg-шных) по определению одноцветные.

man emoji

Как вы собираетесь менять цвет контура у текстуры?

Текстура - это чистый альфа канал. Умножается на цвет и вуаля.

И каким образом это создаст контур?

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

Есть такая штука как https://www.freetype.org/freetype2/docs/reference/ft2-glyph_stroker.html#FT_G... . Как выберется время разберусь как оно работает. Но в любом случае никто не мешает нарисовать контур отдельно. Другой вопрос в том как менеджить кучу букв разнообразных размеров и стилей. Но в любом случае не рекомендуется рендерить каждую букву как векторное изображение, так как это значительно медленнее, чем отрендерить один раз и использовать потом по всему тексту картинкой.

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

Контур - это только пример. Заливку паттерном так не сделаешь. См. https://github.com/RazrFalcon/resvg-test-suite/blob/master/svg/e-text-033.svg

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

Только для примитивного, однотипного текста.

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

вот только у меня задача пакетной растеризации картинок из инкскейпа, но ты и так в курсе (в других похожих проектах использую, кстати, rsvg-convert, т.к. там картинки по-проще и его хватает)

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

Только для примитивного, однотипного текста.

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

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