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
() автор топика
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от 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 😊
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.