LINUX.ORG.RU

libresvg 0.1 — новая альтернатива librsvg

 , , ,


4

7

libresvg 0.1 представляет собой первый экспериментальный выпуск новой библиотеки для отрисовки (рендеринга) SVG.

Основная цель проекта — заменить librsvg и QtSvg, и стать альтернативой Inkscape для тех, кто использует его для конвертирования SVG в PNG.

В текущей версии новая библиотека уже превосходит QtSvg, но не дотягивает до librsvg по возможностям (нет filter, clipPath, mask, marker, pattern). Тем не менее, поддержка стандарта в libresvg намного лучше, из-за чего базовые элементы, такие как path, gradients, shapes, text, поддерживаются лучше (у librsvg множество ошибок отрисовки).

Основные отличия от librsvg:

  • Возможность использовать несколько бекэндов (сейчас реализованы Qt и cairo). librsvg привязан к cairo и glib, из-за чего использовать его вне Linux — проблематично.
  • В отличии от librsvg, в libresvg стадии разбора и отрисовки полностью разделены, что позволяет легко добавлять новые бекэнды. Также это позволяет реализовать множество алгоритмов препроцессинга и валидации SVG, что, в свою очередь, позволяет избежать большого количества ошибок отрисовки.
  • Полная поддержка градиентов. rsvg не умеет наследовать атрибуты, проверять атрибуты на корректность, не поддерживает градиенты без дочерних или с одним дочерним элементом (swatches).
  • Хорошая поддержка отрисовки текста. rsvg не понимает xml:space, text-decoration, не всегда верно отрисовывает многострочный текст, плохо поддерживает tspan.
  • Поддержка CSS намного лучше, но полной поддержки всё ещё нет.

В разделе Releases можно скачать демо-приложение для оценки отрисовки для тех, кто не хочет собирать библиотку из исходников. Также в архиве находится консольное приложение для конвертации, альтернатива rsvg-convert.

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

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

★★★★★

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

ТС, ты крут! Я тебе даже завидую :)

А как по скорости, есть какие-нибудь бенчмарки и сравнения?

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

слепить рендерер вида: берём всё что текст, рамочки и некоторый кастомный svg тэг обозначающий штрихкод, и перерабатываем в команды принтера.

Я видел такой наскоро слепленный рендерер WMF. Он все цвета считал прозрачными и печатал всё, что при просмотре скрывалось :)

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

Чувак удивится, когда узнает, как отрисовываются иконки в Inkscape.

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

AP ★★★★★
()

Название дурацкое и твоя объяснялка на гитхабе вообще нелепа.

Добавить на русском текст на гитхаб не можешь - тогда иди на англофорум.

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

С этим патчем Qt может рендерить градиенты из SVG в 16bpc (без дитеринга). При этом количество опорных точек градиента там ниже нужного, но это не столь заметно.

После этого задитерить эти градиенты можно, например имаджмейджиком, конвертнув 16bpc в 8bpc.

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

Браузеры нынче умеют дитерить градиенты ещё (с относительно недавних пор). Но хреновенько и не все градиенты — svg умеют, css — нет. Хреновенько в том смысле что там всё равно чёткие шаги видны, они только несколько штук промежуточных добавляют с конкретными масками.

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

99% времени тратится внутри cairo/qt, поэтому от либа мало что зависит.

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

Что у вас за монитор такой? У меня 8bit+rfc (псевдо 10) - проблем не замечаю.

Chrome рендерит градиенты так же.

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

Только сейчас заметил в описании, что libresvg удаляет невидимое. Тогда будет достаточно и предельно тупого рендерера.

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

Следует уточнить, что либа удаляет элементы помеченные как невидимые (ну или просто кривые), но не те, что перекрываются другими элементами (ибо такой необходимости нет).

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

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

Поправлю.

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

Я это на всех мониторах замечаю, что у меня есть — ноуты, десктопные мониторы. Они все IPS, если это важно.

Учти, что на маках поведение браузеров несколько другое, под линуксом смотри.

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

librsvg привязан к cairo и glib, из-за чего использовать его вне Linux — проблематично.

Не знаю как на всяких там гайках, а на венде и макоси cairo и glib работают без проблем

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

Я не говорю что он не работает, но установка и распространение - ад.

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

свой парсер svg
что выдаёт сишника с потрохами

тот момент svgparser уже был
я автор svgparser

Что выдает NIH-елиста с потрохами.

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

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

он используется в реальных проектах в отличии от...

Тем временем разработчики тех самых реальных проектов говорят, например, вот такое: «it has been years that some basic bugs which are very annoying are unresolved but librsvg people seem more interested into passing to rust than fixing them. ;-(».

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

И давно в софте бывают гарантии?

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

А где гарантия, что новый парсер лучше?

Речь о том, что «использование в реальных проектах» ничего не гарантирует.

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

У них есть на это причины.

У всех есть причины. Вот ТСу нужен был портируемый рендеринг SVG с качеством, которое он может контролировать, и он его пилит.

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

Дык на момент написание не было либ для работы с svg. Моя была первой.

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

Гарантия в тестах. Чем больше тестов прошли - тем лучше.

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

Хм, scrot портит её. В браузере всё гладко, а в png вертикальные полосы.

Хотя... Зависит от масштаба. Жуть.

https://hkar.ru/ScRX

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

Если ты скриншотишь в той же глубине, что и рендерится — то попробуй масштаб 1:1 сделать. Другой масштаб портит кривой регулярный дитеринг, который там используется браузером. Но если дело в этом — то кривой регулярный дитеринг можно и в масштабе 1:1 заметить ;-)

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

1:1 тоже не ок, просто ты не замечаешь ;-).

Держи с растянутым контрастом — http://oserv.org/bugs/gradient-svg/gradient.contrast.png

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

Там всё так же есть широкие области одного цвета и резкие переходы.

Про дитеринг на примерах можно тут посмотреть: http://www.imagemagick.org/Usage/quantize/

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

Я знаю про градиенты и дитеринг. Но у меня svg версия выглядит хорошо, на глаз. Я не вижу «сломов».

При этом у меня хороший монитор.

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

Тут проблема в том, что в отличии от того же rsvg, я создаю два dom. Первый - это дерево исходного svg, которое я сильно перекраиваю. Второе - это внутреннее представление svg, которое содержит только, что нужно для отрисовки.

Второе - это уже не DOM, а дерево рендеринга

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

Угу. Ну или хотя бы «автоматизированные». В том смысле, что запустил скрипт и всё пошло проверяться с репортом на выходе, а не девопс/сиай и прочая тряхомудия.

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