
Что не так с SVG-файлами в Tcl/tk?
saipr 42 минуты назад Что не так с SVG-файлами в Tcl/tk? Средний 5 мин 1.8K Векторная графика * Графические оболочки * Linux * Облачные сервисы * Python * Туториал Начиная с версии 9.0, в tcl/tk появилась возможность...
Вот важная новость с фронта ИИ: saipr 42 минуты назад Что не так с SVG-файлами в Tcl/tk? 8K Векторная графика * Графические оболочки * Linux * Облачные сервисы * Python * Туториал Начиная с версии 9. 0, в tcl/tk появилась возможность создавать изображения image из SVG-файлов (а значит и сохранять их в png-формате).
Всё было хорошо до тех пор пока мне для статьи на сайте Tcler's Wiki ни потребовался флаг США для кнопки переключения языка интерфейса:В Интернете нашелся компактный svg-файл с изображением этого флага: Я быстренько набросал несколько строк на tcl/tk, чтобы посмотреть воочию на флаг:. lab -bg yellow pack . lab -fill both -expand 1 -padx 1c -pady 1c set img3 .
Технические детали
lab configure -image $img3 То, что я увидел, никак не совпадало с моими ожиданиями: Флаг получился вместо многозвёздного (правый скриншот) однозвёздным (левый скриншот). Никаких сообщений при этом не было. Анализ svg-файла показал, что для прорисовки звёздно-полосатого флага в xml-разметке элегантно используется элемент , а команда image create его просто игнорирует.
Это игнорирование хорошо видно на скриншоте. Такая же ситуация с отображением этого флага уже на svg-холсте и при использовании пакета svg2can, т. и этот пакет не обрабатывает элемент «use», встречающийся в svg-файлах.
При этом пакет svg2can для рендеринга svg-файлов использует команды из пакета tkpath (сейчас добавлена и поддержка пакета tko). Я попытался набросать код на tcl для интерпретации xml-кода с элементами «use» в команды пакета tkpath, но очень скоро понял, что эту задачу просто так в лоб не решить. Вот что написал один человек: Разбор SVG-файлов — дело элементарное; это всего лишь XML.
Отраслевые последствия
Однако интерпретация - совсем другое дело. Но я наткнулся на замечательный проект resvg. В проекте resvg, помимо библиотеки, есть и две утилиты resvg и usvg.
Утилита resvg, которая преобразует svg-файл в png-изображение, в данном контексте нас не интересует. А вот утилита usvg оказалось именно тем, что позволило решить проблему элемента (и не только это) в svg-файлах. Утилита usvg преобразует входной SVG-файл в строго типизированную древовидную структуру, где все элементы, атрибуты, ссылки и другие возможности SVG уже настроены и представлено в максимально простой форме, в которой отсутствует элемент use.
Таким образом, не нужно беспокоиться о большинстве проблем, связанных с анализом SVG-файлов. и можно сосредоточиться только на этапе рендеринга. Как работает утилита usvg каждый может увидеть, применив её к svg-файлу со звёздно-полосатым флагом: usvg <исходный svg-файл> <выходной svg-файл>Сохраним xml-код флага в файле FlagUSuse.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





