2013-07-05 13 views
5

po stronie serwera Mam wygenerowany kod źródłowy SVG XML. To powinno zostać zmienione na obraz, aby umożliwić pobranie pliku PNG (lub JPG) z kodu SVG XML. Przeszukując internet przez długi czas, znalazłem to rozwiązanie tylko za pomocą ImageMagick. Convert SVG image to PNG with PHP Ale nie mam dostępu do biblioteki ImageMagick, więc potrzebuję innej metody konwersji kodu SVG XML na obraz bitmapowy.Utwórz PNG z SVG XML bez ImageMagick

Czy ktoś ma pomysł?

Brw: Nie można zapisać tego pliku svg i wykonać binarnego lub skryptu w systemie operacyjnym w celu konwersji.

Dziękuję.

+0

Czy to znaczy, że należy utworzyć SVG w locie i muszą służyć do PNG? Czy możesz podać więcej szczegółów? Czy próbujesz rozwiązać problem z wieloma przeglądarkami? – andy256

+0

Inkscape może eksportować SVG jako PNG (zapisz, ponieważ nie wydaje się jeszcze działać), ale wydaje się, że nie spełnia on wymagań, tak jak je rozumiem. – andy256

+0

Czy sprawdziłeś [Batik] (http://xmlgraphics.apache.org/batik/), [Jak przekonwertować SVG do PNG w locie] (http://stackoverflow.com/questions/8167977/how -to-convert-svg-into-png-on-the-fly) i [czy jest jakaś biblioteka Java do konwersji .svg do .png lub .jpg przy kodzie?] (http://stackoverflow.com/questions/ 6610792/is-there-some-java-library-for-conversion-svg-to-png-or-jpg-at-code)? Używają java, ale powinieneś być w stanie go podłączyć. – andy256

Odpowiedz

0

Musisz użyć biblioteki batik. Pobierz go, umieszczony gdzieś w projekcie. Następnie w php zadzwoń do komendy batik używając funkcji shell_exec(). Zajmie to kilka sekund i przekształci cię w svg na png.

Przykład: -

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

Dziękuję za tę odpowiedź, ale nie pasuje to do mojego pytania, ponieważ: 'Nie jest opcją zapisania tego pliku svg i wykonania skryptu binarnego lub skryptu w systemie operacyjnym do konwersji ". Ale właśnie to jest twoja sugestia. –

Powiązane problemy