SVG-Lineargradient wird von unterschiedlicher Software anders angezeigt, wenn das Attribut x2 nicht vorhanden ist

686
Socob

Ich habe kürzlich eine Datei in Inkscape importiert und bearbeitet . Ich habe das Bild in Inkscape als „optimiertes SVG“ gespeichert, aber als ich die resultierende Datei in verschiedenen Programmen öffnete, wurde sie von Inkscape wie von Inkscape angezeigt, während andere keinen bestimmten linearen Farbverlauf annahmen (in allen anderen Teilen des Bildes), einschließlich der Steigungen, funktionierten gut).

Bis jetzt für die Hintergrundgeschichte. Ich habe mein Originalbild in einem minimalen Beispiel zusammengefasst und festgestellt, durch welchen Teil der SVG-Quelle sich verschiedene Zuschauer unterschiedlich verhalten. Dies ist meine Beispiel-SVG-Datei:

<?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> 

So sieht es in Inkscape und dem GNOME-Bildbetrachter („Eye of GNOME“) aus : Beispiel eines SVG-Bildes in Inkscape oder Eye of GNOME

So sieht es in den Webbrowsern Firefox und Chromium aus: Beispiel eines SVG-Bildes in Firefox oder Chromium

Ich habe jedoch festgestellt, dass das Bild in allen diesen Viewern gleich aussieht, wenn Sie x2="1"das <linearGradient>Element dem Element hinzufügen .

Ich kenne die Details des SVG-Dateiformats und des SVG-Standards leider nicht genug, aber mir scheint klar zu sein, dass eine dieser Interpretationen meiner Datei falsch sein muss (dh den Standard verletzt) . Weiß jemand, wessen Seite richtig ist (dh für welche Programme sollte ich einen Fehlerbericht einreichen)?

0
Der Standard [ziemlich eindeutig] (https://www.w3.org/TR/SVG11/pservers.html#LinearGradientElementX1Attribute) besagt, dass alle von x1, x2, y1 und y2 optional sind und Standardwerte haben. Juancho vor 7 Jahren 0
Und es scheint einen Fehler im Standard zu geben, da die Standardwerte 0%, 100%, 0% und ** 0% ** sind. Juancho vor 7 Jahren 0
@ Juancho Aaah, ich verstehe. Ich hätte das nicht erwartet, aber wenn Sie darüber nachdenken, ist es sinnvoll. Ein Gradientenvektor, bei dem es sich um den Nullvektor handelt, ist nicht wirklich sinnvoll, sodass er nicht alle Standardwerte auf 0% setzen und willkürlich einen Vektor auswählen kann, der in die positive x-Richtung zeigt. Ich glaube nicht, dass es sich um einen Fehler im Standard handelt, aber in der Software, die diese Standardeinstellungen nicht korrekt implementiert. Socob vor 7 Jahren 1

1 Antwort auf die Frage

0
Socob

OK, ich bin mir noch nicht ganz sicher, welche der beiden Darstellungen korrekt ist, aber ich vermute, dass dies die von den Webbrowsern angezeigte ist, da ich in meinem Beispiel in Inkscape und Eye of GNOME (siehe unten).

Ich habe den Grund dafür herausgefunden, wie ich auf dieses Problem aufmerksam wurde: Die SVG-Datei, die ich mit Inkscape geöffnet hatte, hatte eine <linearGradient>mit den Attributen gradientUnits="userSpaceOnUse"und x2="1"(genau wie in meinem Beispiel). Beim Speichern als "optimiertes SVG" hat Inkscape das x2="1"Attribut "wegoptimiert", weil es dies als äquivalent interpretierte. Dies x2="100%"ist die Standardeinstellung für das x2Attribut, wie vom SVG-Standard angegeben, und könnte daher weggelassen werden. Jedoch Inkscapes Interpretation, x2="100%"x2="1"ist (wahrscheinlich) falsch - das ist Inkscape Bug # 1153706 .

In meiner Forschung zu diesem Thema, habe ich verschiedene Unstimmigkeiten über angetroffen, wie verschiedene Software verarbeitet gradientUnits="userSpaceOnUse"in Kombination mit dem Gradientenvektor Attributen x1, x2, y1und y2. Im Folgenden sind Fehlerberichte aufgeführt, die entweder bereits vorhanden waren oder die ich aufgrund meiner Ergebnisse eingereicht habe: