LINUX.ORG.RU

resvg 0.5 — библиотека отрисовки SVG

 , ,


4

4

resvg — это библиотека для отрисовки SVG, прямыми аналогами которой являются librsvg и QtSvg. Но в отличие от них, resvg поддерживает отрисовку с помощью нескольких бэкендов (Qt и cairo) и обеспечивает более полную поддержку стандарта. Также resvg является модульным, что позволяет использовать лишь нужные функции.

Основные изменения:

  • Это bugfix релиз, поэтому в нём множество исправлений.
  • Добавлена поддержка marker.
  • Добавлена частичная поддержка baseline-shift, letter-spacing и word-spacing.
  • Добавлены плагины для использования resvg в качестве генератора превью в Dolphin и в Windows Explorer.
  • Добавлено 143 новых теста. Общее количество достигло 958-и.

Результаты тестирования. Сравнительная таблица. Список нереализованных возможностей.

Так как marker был успешно реализован, до полной поддержки static SVG осталось реализовать textPath, Unicode BIDI (left-to-right, top-to-bottom, glyph orientation и т.д.) и несколько фильтров.

>>> GitHub

★★★★★

Проверено: Shaman007 ()

Добавлены плагины для использования resvg в качестве генератора привью в... Windows Explorer.

Весчь! Надо бы утащить в инсталлер sK1 для винды :)

Linfan ★★★★★ ()
Ответ на: комментарий от RazrFalcon
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- sK1 2 0
00000540 -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="300" height="300">
<image y="0.0"  x="0.0" xlink:href="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAIAAAD2HxkiAAAABmJLR0QA/wD/AP+gvaeTAAADpElEQVR4nO3WsUkEARRF0b8ykbLJRoJYgGy4PRhsM9ZiMwb2YCgWYCIIgoimYxk3mHMqeMmFt1vXdYDORT0Atk6EEBMhxEQIMRFCTIQQEyHERAgxEUJMhBATIcRECDERQkyEEBMhxEQIMRFCTIQQEyHERAgxEUJMhBATIcRECDERQkyEEBMhxEQIMRFCTIQQEyHERAgxEUJMhBATIcRECDERQkyEEBMhxEQIMRFCTIQQEyHERAgxEUJMhBATIcRECDERQkyEEBMhxEQIMRFCTIQQEyHERAgxEUJMhBATIcRECDERQkyEEBMhxEQIMRFCbJmZp5e316+/eglszvFweT7dLTPz/P7z+H1d74HNefj9OJ/cUaiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKILTNzf7u/ufqsl8DmHA/7mdmt61ovgU1zRyEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIISZCiIkQYiKEmAghJkKIiRBiIoSYCCEmQoiJEGIihJgIIfYP4UUXFWVcr+cAAAAASUVORK5CYII=
"  height="300" width="300" />
<!-- Encapsulated SK2
obj('Document')
set_field('styles',{'Default Style': [[], [0, 0.28346456692913385, ['CMYK', [0.0, 0.0, 0.0, 1.0], 1.0, 'Black'], [], 1, 0, 10.433, 0, 0, []], [], []], 'Default Text Style': [[1, 0, ['CMYK', [0.0, 0.0, 0.0, 1.0], 1.0, 'Black']], [], ['Sans', 'Regular', 12.0, 0, [], True]]})
set_field('doc_units','mm')
set_field('metainfo',['', '', '', ''])
set_field('doc_origin',1)
set_field('resources',{})
obj('Pages')
set_field('page_counter',1)
set_field('page_format',['A4', (595.275590551181, 841.8897637795275), 0])
obj('Page')
set_field('name','Page 1')
set_field('page_format',['A4', (595.275590551181, 841.8897637795275), 0])
set_field('layer_counter',1)
obj('Layer')
set_field('style',[[], [0, 0.28346456692913385, ['RGB', [0.19607843137254902, 0.3215686274509804, 0.6352941176470588], 1.0, ''], [], 1, 0, 10.433, 0, 0, []], [], []])
set_field('name','Layer 1')
set_field('color',[0.19607843137254902, 0.3215686274509804, 0.6352941176470588, 1.0])
set_field('properties',[1, 1, 1, 1])
obj('Rectangle')
set_field('style',[[1, 0, ['CMYK', [1.0, 0.0, 0.0, 0.0], 1.0, 'Cyan']], [0, 0.28346456692913385, ['CMYK', [0.0, 0.0, 0.0, 1.0], 1.0, 'Black'], [], 1, 0, 10.433, 0, 0, []], [], []])
set_field('width',434.376252867)
set_field('corners',[0.0, 0.0, 0.0, 0.0])
set_field('stroke_trafo',[])
set_field('height',243.860352486)
set_field('start',[-239.0974549769873, -50.48671360071844])
set_field('fill_trafo',[])
set_field('trafo',[1.0, 0.0, 0.0, 1.0, 0.0, 0.0])
obj_end()
obj_end()
obj_end()
obj_end()
obj('DesktopLayers')
obj_end()
obj('MasterLayers')
obj_end()
obj('GridLayer')
set_field('style',[[], [0, 0.28346456692913385, ['RGB', [0.0, 0.0, 1.0], 0.15, ''], [], 1, 0, 10.433, 0, 0, []], [], []])
set_field('name','GridLayer')
set_field('color',[0.0, 0.0, 1.0, 0.15])
set_field('grid',[0.0, 0.0, 2.8346456692913384, 2.8346456692913384])
set_field('properties',[0, 0, 0, 1])
obj_end()
obj('GuideLayer')
set_field('style',[[], [0, 0.28346456692913385, ['RGB', [0.0, 0.3176470588235294, 1.0], 1.0, ''], [], 1, 0, 10.433, 0, 0, []], [], []])
set_field('name','GuideLayer')
set_field('color',[0.0, 0.3176470588235294, 1.0, 1.0])
set_field('properties',[1, 1, 0, 0])
obj_end()
obj_end()
-->
</svg>
Linfan ★★★★★ ()
Ответ на: комментарий от anonymous

Это смотря на каком языке читать. В английском буква «e» называется «и» и читается в этом слове также.

Устоявшаяся форма написания этого слова в русском языке – превью. Форма чтения см. по https://ru.wiktionary.org/wiki/превью, через звук ʲɪ.

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

раз про код либы возразить нечего

Поскольку мсье стал в позицию растоманского гуру, ждем от него детализации и конкретики, а не просто «фу-фу-фу». Делать полный код ревью необязательно - приведите наиболее существенные замечания по коду.

Linfan ★★★★★ ()

а его можно научить в многопоточный рендеринг? Если нет, то есть ли такой отрисовщик, который так умеет?

QtSVG с некоторыми файлами очень долго ворочается.

Tuxman ()
Ответ на: комментарий от menangen

В теории - да. Но, как я понимаю, там очень мало средств для 2D графики, поэтому многое придётся писать самому.

То есть для начала кто-то должен запилить нормальные либы для кривых Безье и текстовый layout (по типу pango).

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

Покажите файл, который долго рендерится.

Проблема в том, что за многопоточную отрисовку придётся заплатить оперативкой. А учитывая что у нас битмапы - это будут сотни мегабайт.

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

Логов нет. У меня на чистой десяточке - УМВР.

Нужно сбросить кеш иконок (хз как). Для теста попробуйте скопировать SVG файл, тогда он отрисуется заново.

оригинальный SVG Explorer Extension тоже не работает

УМВР

IE продолжает генерит привьюхи

Я не знал что он вообще это умеет. У меня, по умолчанию, вообще нет привью. Видимо что-то накрутили уже.

Вопрос со сбросом кеша привьюшек открытый. Но как это сделать - хз. Я пробовал пару методов из гугла - ни один не работает. Тот случай, когда винда ломает совместимость каждую версию.

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

«Сперва добейся»

Это называется «репутация». Пока о тебе относительно Rust-а известно только одно: мощно влепил себе в ник на ЛОРе.

Раз тебе нечего показать — замолчи свой рот.

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

Может быть посмотрим на твой код?

сперва добейся, ага

да ты не стесняйся, эксперт. щас был ответ труса-бестолкового-крикуна. Критикуешь — предлагай, иначе — грош тебе цена

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

Логов нет. У меня на чистой десяточке - УМВР.

Такое негодится. У подавляющего большинства юзеров десяточка не чистая.

Скорее всего неразбериха с оформлением SVG формата в регистри. Но это на уровне предположений. Кеш тут врядли роялит - у меня иконки SVG это лого Инкскейпа.

Я не знал что он вообще это умеет. У меня, по умолчанию, вообще нет привью. Видимо что-то накрутили уже.

На Win7 стоит IE 11. Он в футере проводника показывает превью и инфо по файлу.

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

Я думал это легаси. Как минимум в десяточке отдельная папка для баз привьюшек.

Да и в жопу тогда вашу десяточку ) они все меняют быстрее, чем я успеваю разбираться. Таким макаром всю жизнь будешь учиться и все равно ничего знать не будешь. Фу.

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

Да и в жопу тогда вашу десяточку )

Оно то хорошо бы, но какбэ потенциальных пользователей плагина для эксплорера эдак на 3-4 порядка больше, чем таковых для плагина Дельфина.

Linfan ★★★★★ ()