2013-07-05 20 views
5

sul lato server Ho un codice sorgente XML SVG generato. Questo dovrebbe essere cambiato in un'immagine per offrire un download PNG (o JPG) da un codice XML SVG. Cercando sul web per un lungo periodo, ho trovato questa soluzione solo con ImageMagick. Convert SVG image to PNG with PHP Ma non ho accesso alla libreria ImageMagick, quindi ho bisogno di un modo diverso per convertire il codice XML SVG in un'immagine bitmap.Crea PNG da XML SVG senza ImageMagick

Qualcuno ha un'idea?

Brw: Non è un'opzione per salvare che svg esegue un binario o uno script sul sistema operativo da convertire.

Grazie.

+0

Vuoi dire che si crea uno SVG al volo, e la necessità di servire un PNG? Puoi dare maggiori dettagli? Stai cercando di risolvere un problema cross-browser? – andy256

+0

Inkscape può esportare SVG come PNG (salva come sembra non funzionare ancora), ma questo non sembra soddisfare i requisiti perché li capisco. – andy256

+0

Hai controllato [Batik] (http://xmlgraphics.apache.org/batik/), [Come convertire SVG in PNG al volo] (http://stackoverflow.com/questions/8167977/how -to-convert-svg-in-png-on-the-fly) e [Esiste qualche libreria Java per convertire .svg in .png o .jpg nel codice?] (http://stackoverflow.com/questions/ 6610792/non-è-some-java-biblioteca-per-conversione-svg-to-png-o-jpg-in-codice)? Usano java, ma dovresti essere in grado di collegarlo. – andy256

risposta

0

È necessario utilizzare la libreria batik. Scaricalo, posizionato da qualche parte nel tuo progetto. Quindi in php chiama il comando batik usando la funzione shell_exec(). Ci vorranno pochi secondi e convertirai svg in png.

Esempio: -

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

Grazie per la risposta, ma non si adatta alla mia domanda, perché: 'Non è un'opzione per salvare che svg esegue un binario o uno script sul sistema operativo da convertire ». Ma esattamente questo è il tuo suggerimento. –

Problemi correlati