Diskussion:SVG/ Dokumentstruktur

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Bild in Originalgröße?[Bearbeiten]

Hallo, falls mich hier jemand hört. Ich habe eine Frage zu Image-Einbindung. Ich möchte ein Bild in einer svg-Grafik in Originalgröße einbinden. Beispiel, das Bild http://upload.wikimedia.org/wikipedia/commons/8/8e/P_countries.png mit 200px × 183px soll in die linke obere Ecke meines Bildes. Das erreiche ich beispielsweise mit

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300"  xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="0" y="0" width="300" height="300" style="fill:red"/>
<image xlink:href="http://upload.wikimedia.org/wikipedia/commons/8/8e/P_countries.png" width="200" height="183" />
</svg>

Was aber, wenn ich die Breite und Höhe nicht kenne? Ich erzeuge die svg automatisch mit unterschiedlichen Bildern und will die jeweils in ihrer Originalgröße haben. hat da einer eine Idee?

Gruß Penz

Ich sollte da bei dem Text zu image mal eine Kleinigkeit korrigieren, fällt mir gerade auf. In SVG 1.1 sind die Attribute width und height erforderlich. Werden die nicht angegeben, ist dies ein Fehler, der zum Abbruch der Darstellung des Dokumentes führen sollte (tut es bei gängigen Darstellungsprogrammen natürlich nicht wirklich). Was immer da für Längen angegeben werden - irgendwas muß da stehen, damit das Bild angezeigt wird. Das ist anders als bei (X)HTML oder CSS, wo das automatisch aus dem Bild ausgelesen wird. Insofern sehe ich da keine Chance, ein Bild in Originalgröße anzuzeigen, wenn man dessen Abmessungen nicht kennt. Zumindest wenn man das auf einem server zusammenbasteln läßt, kann man das ja aber bei PNG, JFIF/JPEG oder GIF einfach per PHP in Erfahrung bringen und eintragen lassen. Erstellt man das SVG-Dokument manuell, sollte es ja auch kein Problem sein, Breite und Höhe zu ermitteln (es sei denn, die Pixelgraphik wird von einem Skript erzeugt und das SVG nicht). Gmeinhin ist man bei Graphik ja daran interessiert, daß die Pixelgraphik gerade nicht unkontrolliert herumvagabundiert, weil sich auch sonst nichts danach richtet, wie groß das Teil ist ;o)
Mag natürlich sein, daß da andere Leute noch kreativere Ideen haben, gibt ja auch (meist englischsprachige) mailing-Listen für Entwickler, wo sowas diskutiert werden kann - vielleicht hat da jemand eine Idee, die ich jetzt zumindest nicht sehe. Jedenfalls ein interessantes Problem, welches mir noch nicht untergekommen ist, weil bei mir die meisten SVGs sowieso mit der Größe des verfügbaren Anzeigebereiches skalieren. Und Angaben zum Aspektverhältnis kann man ja machen.
Eine Möglichkeit bestünde natürlich in einem XHTML+SVG-Dokument. Da kann man die Pixelgraphik im XHTML automatisch in der Originalgröße anzeigen lassen und das SVG wie gehabt. Entweder pappt man also das SVG als Fragment ins XHTML oder man pappt das XHTML+Pixelbild in ein foreignObject mit der größeren Chance, daß das nicht überall richtig angezeigt wird... Doktorchen 19:10, 28. Apr. 2010 (CEST)[Beantworten]
Vielen Dank für die schnelle Antwort! Es bestätigt leider meine Befürchtung. Bei inkscape kann man width und height weglassen (gegen die svg-Spezifikation), dann wird es in der Originalgröße angezeigt, aber leider mit firefox nicht. Ich erzeuge die svg per xslt aus einem proprietären Dateiformat, da komm ich an die Größenparameter des Bildes nicht dran. Gruß Penz

SVG-Dokument in image[Bearbeiten]

Sorry, dass ich Dich nochmal störe. Mein letztes Problem habe ich gelöst. Nun will ich ein externes svg einbinden. Mit image geht das ja ebenfalls sehr einfach, aber dann wird es ja in Pixelgrafik umgewandelt. Wie schaffe ich das denn als Vektorgrafik? Gruß Penz

Wie kommst du darauf, daß das in Pixelgraphik umgewandelt wird? Bei den tiny-Profilen kann man damit allerdings kein SVG einbinden, nur Pixelgraphik. Bei SVG 1.1 geht das schon - prinzipiell auch komplett funktionsfähig, allerdings ohne präzise zeitliche Synchronisation mit dem Hauptdokument.
Aufgrund von Fehlern, Lücken in Darstellungsprogrammen kann es allerdings sein, daß Animation nicht funktioniert.
Aufgrund von Sicherheitsbedenken kann es ferner sein, daß ähnlich wie beim (X)HTML-Element img Skripte ignoriert werden.
Beides sind allerdings keine Anforderungen von SVG selbst, sondern eher Probleme der Darstellungsprogramme.
Bei SVG tiny 1.2 gibt es das Element animation, mit dem kann man dann auch SVG-Dokumente einschließlich Zeitsynchronisation einbinden. Nachvollziehbar ist das z.B. teilweise mit Opera seit Version 9.5 meine ich. Doktorchen 12:49, 11. Jun. 2010 (CEST)[Beantworten]
Ich hab in testbild.svg ein anderes eingebunden mit <image width="1000" height="1000" transform="translate(0,0)" xlink:href="bild27.svg"/>
Wenn ich es mit Inkscape öffne, wird die Schrift pixelig gerastert, obwohl bild27.svg saubere Vektorschrift hat. Dasselbe, wenn ich das svg auf der Kommandozeile mit inkscape nach pdf konvertiere. Ich muss mal sehen, ob ich daran am Inkscape was drehen kann. Penz
Das ist dann wohl ein Problem, welches spezifisch für inkscape ist. Ich habe mir das mal bei einem Beispiel angesehen - schön ist das nicht, könnte aber ohne Vergrößerung noch mit den Mindestqualitätsanforderungen übereinstimmen. Opera oder Konqueror+KSVG haben solch ein Problem jedenfalls nicht. Firefox3 und WebKit scheinen hingegen generelle Anzeigeprobleme zu haben ;o)
Im Vollformat könntest du ja das gesamte svg-Element in die andere Datei kopieren, statt image zu verwenden (also Dateiinhalt ohne Verarbeitungsanweisung), vielleicht kommt inkscape damit besser zurecht. Doktorchen 14:09, 11. Jun. 2010 (CEST)[Beantworten]
Ja, wenn's anders nicht geht muss es halt so. Da das ganze Teil eines Scripts ist ist Deine Lösung möglich. Vielen Dank, Penz
Einbindung externer Dokumente ist für einige Programme etwas kniffliger, ebenso wie mehrere, ineinander verschachtelte svg-Elemente. Bei den vielen Fehlern und Lücken in Darstellungsprogrammen ist es meist sinnvoll, 'den Ball flachzuhalten' und es so einfach wie möglich zu machen, also nur die relevanten Fragmente zu kopieren und eventuell durch transform anzupassen - skalieren, positionieren. Nun ist allerdings auch inkscape nicht gerade das Maß aller Dinge, was die Anzeige von SVG anbelangt ;o) Wenn das sowieso per Skript passiert, ist es natürlich gut machbar, wie auch bei XHTML ein Dokument einfach mit der Skriptsprache aus Fragmenten zusammenzusetzen. Das kann man dann auch leicht darauf verzichten, mehrere svg-Elemente zu verwenden, wenn man nicht wirklich jeweils einen eigenen neuen Anzeigebereich als Ausschnitt braucht. Doktorchen 14:49, 11. Jun. 2010 (CEST)[Beantworten]