Я недавно импортировал и отредактировал файл в Inkscape. Я сохранил изображение как «оптимизированный SVG» в Inkscape, но когда я открывал полученный файл в разных программах, некоторые отображали его так же, как Inkscape, в то время как другие не применяли определенный линейный градиент (в то время как все другие части изображения , в том числе градиенты, работали нормально).

Пока что для предыстории. Я сжал свое исходное изображение в минимальном примере и определил, какая часть источника SVG заставляет разных зрителей вести себя по-разному. Это мой пример файла SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" height="982" width="982" version="1.1"
 viewBox="0 0 982 982">
 <defs>
  <linearGradient id="a" gradientUnits="userSpaceOnUse"
   gradientTransform="matrix(-62.075 1070.8 1070.8 62.075 521.8 -42.09)">
   <stop stop-color="#bbb9c2" offset="0"/>
   <stop stop-color="#3f3" offset="1"/>
  </linearGradient>
 </defs>
 <path fill="url(#a)" d="m0 491.11c0 271.12 219.78 490.89 490.85 490.89 271.13 0 490.92-219.77 490.92-490.89 0-271.07-219.79-490.86-490.92-490.86-271.07 0-490.85 219.79-490.85 490.86"/>
</svg>

Вот как это выглядит в Inkscape и в программе просмотра изображений GNOME («Глаз GNOME»): пример изображения SVG в Inkscape или Eye of GNOME

Вот как это выглядит в браузерах Firefox и Chromium: пример SVG-изображения в Firefox или Chromium

Однако я заметил, что если вы добавите атрибут x2="1" к <linearGradient> , изображение будет выглядеть одинаково во всех этих средствах просмотра.

К сожалению, я недостаточно знаком с деталями формата файла SVG и стандарта SVG, но мне кажется ясным, что одна из этих интерпретаций моего файла должна быть неправильной (то есть нарушать стандарт). Кто-нибудь знает, чья сторона права (например, для каких программ я должен подать отчет об ошибке)?

1 ответ1

0

Хорошо, так что я не совсем уверен, какое из этих двух представлений является правильным, но я подозреваю, что это то, что отображается в веб-браузерах, потому что я обнаружил ошибки, влияющие на поведение в моем примере как в Inkscape, так и в Eye of GNOME (см. ниже).

Я выяснил причину , как я был проинформирован об этой проблеме , в первую очередь: Файл SVG я открыл с помощью Inkscape был <linearGradient> с атрибутами gradientUnits="userSpaceOnUse" и x2="1" (так же , как в моем примере). При сохранении как "оптимизированный SVG" Inkscape "оптимизировал " атрибут x2="1" поскольку он интерпретировал его как эквивалентный x2="100%" , который является атрибутом по умолчанию для атрибута x2 как указано в стандарте SVG, и, таким образом, может быть опущено. Однако интерпретация x2="100%"x2="1" Inkscape (вероятно) неверна - это ошибка Inkscape # 1153706.

В моих исследованиях по этой проблеме я столкнулся с различными несоответствиями того, как разные программы обрабатывают gradientUnits="userSpaceOnUse" в сочетании с атрибутами вектора градиента x1 , x2 , y1 и y2 . Ниже приведены сообщения об ошибках, которые либо уже существуют, либо которые я сам подал в результате своих выводов:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .