LINUX.ORG.RU

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

 , , ,


5

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.

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

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

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

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

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

question4 ★★★★★ ()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

annulen ★★★★★ ()
Ответ на: комментарий от 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

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

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

AP ★★★★★ ()
Ответ на: комментарий от 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)
Ответ на: комментарий от RazrFalcon

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

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

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

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

frob ★★★★ ()