2013-07-05 9 views
5

auf Serverseite Ich habe einen generierten SVG XML-Quellcode. Dies sollte in ein Bild geändert werden, um einen PNG- (oder JPG-) Download von einem SVG-XML-Code anzubieten. Im Web für eine lange Zeit suchen, fand ich nur diese Lösung mit ImageMagick. Convert SVG image to PNG with PHP Aber ich habe keinen Zugriff auf die ImageMagick-Bibliothek, also brauche ich eine andere Möglichkeit, SVG XML-Code in ein Bitmap-Bild zu konvertieren.Erstellen von PNG aus SVG XML ohne ImageMagick

Hat jemand eine Idee?

Brw: Es ist keine Option zu speichern, dass Svg eine binäre oder Skript auf Betriebssystem konvertieren zu konvertieren.

Vielen Dank.

+0

Meinen Sie, dass Sie eine SVG-on the fly erstellen, und brauchen eine PNG zu dienen? Kannst du mehr Details geben? Versuchen Sie, ein browserübergreifendes Problem zu lösen? – andy256

+0

Inkscape kann SVG als PNG exportieren (speichern, da scheint es noch nicht zu funktionieren), aber dies scheint nicht die Anforderungen zu erfüllen, wie ich sie verstehe. – andy256

+0

Haben Sie [Batik] (http://xmlgraphics.apache.org/batik/), [Wie konvertiert man SVG in PNG on-the-fly] ausgecheckt (http://stackoverflow.com/questions/8167977/how) -konvertieren-svg-in-png-on-the-fly) und [Gibt es eine Java-Bibliothek zum Konvertieren von .svg in .png oder .jpg im Code?] (http://stackoverflow.com/questions/ 6610792/is-There-einige-Java-Bibliothek-für-Konvertierung-Svg-zu-Png-oder-jpg-at-Code)? Sie benutzen Java, aber Sie sollten in der Lage sein, es anzuschließen. – andy256

Antwort

0

Sie müssen Batik-Bibliothek verwenden. Laden Sie es herunter, irgendwo in Ihrem Projekt platziert. Rufen Sie dann in php den Befehl batik mit der Funktion shell_exec() auf. Es dauert einige Sekunden und konvertiert Sie Svg zu Png.

Beispiel: -

outputfile ='path where you want to lace png' 
$tempSVG_filename = '/var/www' . $baseUrl . '/png/temp.svg'; 
$tempSVG_handle = fopen($tempSVG_filename, 'w+'); 
fwrite($tempSVG_handle, $YourSVG); 
fclose($tempSVG_handle); 
$mimetype = 'image/png'; 
$width = '6000'; 

$result = shell_exec('java -jar /var/www/svgtopng/batik-1.7/batik-rasterizer.jar -m ' . $mimetype . ' -d ' . $outputfile . ' -w ' . $width . ' ' . $tempSVG_filename . ' 2>&1'); 
unlink($tempSVG_filename); 
+0

Danke für diese Antwort, aber es passt nicht zu meiner Frage, denn: 'Es ist keine Option, diese Svg zu speichern und eine Binärdatei oder ein Skript auszuführen auf Betriebssystem zu konvertieren '. Aber genau das ist dein Vorschlag. –