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.

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

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

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

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

Тогда их следует удалять при подготовке к печати? И тупой драйвер оказывается непригоден?

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

Выше Dark_SavanT хочет печатать SVG. Я вспомнил свои проблемы при печати векторных изображений под Windows (WMF, вставленных в Word). Было 2 круга с надписями. При выводе на экран один круг частично закрывал другой, и была видна только одна надпись — как и было задумано. При печати надпись на частично скрытом круге тоже была видна, из-за этого обе становились нечитаемы. Если библиотека не умеет удалять невидимые точки, это должен сделать, например, драйвер принтера (или какая программа переводит это в понятный принтеру формат).

P.S. Или программа, конструирующая SVG, должна обеспечить отсутствие перекрывания. Походе, у него будет именно так.

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

Это была попытка предсказать возможный баг до того, как его обнаружат.

P.S. Доберусь до инкскейпа, попробую изобразить.

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

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

ImageMagic же умеет, можно еще и с настроечками поиграться:

convert -depth 32 -define png:compression-level=0 define png:compression-filter=0 -background none image.svg PNG32:image.png

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

Я про основную цель проекта — «Inkscape для конвертирования SVG в PNG». Показал что скейп для этого не нужен.

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

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

Или не увидел ошибку.

Ну вот как для плаката на очередной конфе Libre Graphics Meeting организаторы запихнули векторную иконку гимпа в скрайбус и не увидели, что скрайбус рендерит её с кисточкой, пропарывающей Вильберу щёку насквозь :)

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

Что это такое?

Не знаешь как описывается path в свг: m, h, v, l, c, z?

В svg нет слоёв

Зато есть порядок объявления элементов, их позиционирование в координатах, что визуально воспринимается как слои.

Только самый примитивный

Возможно.

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

Не знаешь как описывается path в свг: m, h, v, l, c, z?

Это шутка такая? И это не «патчи», а path (паф). Выучите терминологию, или хотя бы англ. язык для начала.

Зато есть порядок объявления элементов

Вообще-то самый близкий аналог слоёв - это 'g'. Но там всё устроенно намного сложнее, чем вам кажется.

Возможно.

Инфа 146%.

RazrFalcon ★★★ ()