SVG -> DOM Knoten als PNG extrahieren

Hallo,
ich möchte gerne aus einer SVG Datei einen Knoten extrahieren und als PNG abspeichern. Eine stark vereinfachte SVG Datei findet man hier. Ich brauche also z.B. g1 und g10 daraus, im richtigen Dokument gibt es natürlich noch mehr g-Elemente. Wie kann ich das am einfachsten machen? Ob es jetzt über ein eigenständiges Programm oder Perl-Script läuft ist mir egal. Am liebsten wäre mir PHP, aber ein Programmaufruf über exec() bringt mich auch nicht um :)

Nach mehr als einer Stunde herumgesuche bin ich jedenfalls nicht schlauer geworden, vielleicht hat hier jemand einen Denkanstoß für mich :(


MfG Christian
 
Hallo,

ImageMagick heisst das Zauberwort. Entweder du installierst Dir die PHP Libs dazu, oder Du kannst alternativ auch die commandline Tools verwenden (dann inkl. dem erwähnten exec() Aufruf).

Nach der PHP-Lib Installation sollte soetwas funktionieren:
PHP:
<?
$im = new Imagick();
$input = "<?xml version='1.0' standalone='no'?><svg width='100px' height='100px'><rect x='10' y='10' width='80' height='80' fill='blue' /></svg>";
$im->readImageBlob($input);
$im->setImageFormat("png");

header("Content-type: image/png");
echo $im->getImageBlob();
?>

Gruss
 
Danke einmal, stellt sich nur noch die Frage wie ich den DOM Knoten/Element da heraus extrahieren bzw. als eigenständiges Bild verwenden kann. Denn ich brauche ja nicht das ganze SVG Bild. Ich fürchte, wenn ich das mit einem DOM Parser extrahiere, stimmen irgendwie die Größenangaben dann nicht mehr genau, oder? Entschuldige die dumme Frage, aber mit SVG hatte ich bisher noch nichts zu tun :)


MfG Christian
 
Wenn Du Dir das obige Beispiel ansiehst, sollte recht schnell klar werden, was im svg input ausgetauscht werden muss um Dein Ziel zu erreichen. Dazu kannst Du nun entweder die hardcore Variante gehen, und deine "g-Elemente" per Stringverarbeitung aus deinem Input auslesen und Teil-svgs bauen, oder Du benutzt einen XML Parser und ziehst mit dessen Hilfe die g-Knoten heraus.
Weiss jetzt nicht wo genau noch Dein Problem ist, aber noch mehr Code zu liefern würde das Maß eines "Denkanstosses" m.E. überschreiten. Du willst ja sicherlich auch noch basteln und Dein Erfolgserlebnis feiern.

Gruss
 
Weiss jetzt nicht wo genau noch Dein Problem ist, aber noch mehr Code zu liefern würde das Maß eines "Denkanstosses" m.E. überschreiten. Du willst ja sicherlich auch noch basteln und Dein Erfolgserlebnis feiern.
Nirgends, passt schon. Dann werde ich das so machen, Danke! :)


MfG Christian
 
Back
Top