Come promesso nel precedente articolo, in questo cercherò di illustrare come salvare un SVG in PNG. I metodi da me testati sono due:
- usando una libreria PHP chiamata ImageMagick
- usando uno script JavaScript chiamato phantomjs
Con ImageMagick bastano le seguenti poche istruzioni per salvare su filesystem il PNG:
$usmap = '/path/to/blank/us-map.svg';
$im = new Imagick();
$svg = file_get_contents($usmap);
$im->readImageBlob($svg);
$im->setImageFormat("png24");
$im->writeImage('/path/to/colored/us-map.png');
$im->clear();
$im->destroy();
Quello che ho potuto constatare usando ImageMagick è che sorgono dei problemi quando l’SVG contiene dei CSS i cui effetti non vengono riportati nel PNG ottenuto dopo la conversione.
Mentre per convertire usando phantomjs, è sufficiente scaricare (in base al proprio sistema operativo) phantomjs da qui spostare la dir ottenuta dopo la decompressione in una posizione sul proprio file system ed eseguire nel proprio script PHP le seguenti istruzioni:
/* per spostarsi nella dir dove abbiamo il nostro phantomjs */
chdir('path/to/phantomjs');
/* per eseguire phantomjs */
exec("phantomjs rasterize.js $url /path/where/save/my.png);
Da notare nel metodo exec:
- phantomjs è la chiamata al file exe contenuto nella dir
- rasterize.js è uno script JavaScript che troviamo nella cartella example dopo aver scaricato la libreria
- $url è una variabile all’URL dove abbiamo il nostro SVG
- è possibile aggiungere altri parametri all’esecuzione di phantomjs, per approfondire vedere la documentazione
Per quanto riguarda questa soluzione direi che sembra un po’ macchinosa, ma il risultato devo dire che è stato soddisfacente.Come promesso nel precedente articolo, in questo cercherò di illustrare come salvare un SVG in PNG. I metodi da me testati sono due:
- usando una libreria PHP chiamata ImageMagick
- usando uno script JavaScript chiamato phantomjs
Con ImageMagick bastano le seguenti poche istruzioni per salvare su filesystem il PNG:
$usmap = '/path/to/blank/us-map.svg';
$im = new Imagick();
$svg = file_get_contents($usmap);
$im->readImageBlob($svg);
$im->setImageFormat("png24");
$im->writeImage('/path/to/colored/us-map.png');
$im->clear();
$im->destroy();
Quello che ho potuto constatare usando ImageMagick è che sorgono dei problemi quando l’SVG contiene dei CSS i cui effetti non vengono riportati nel PNG ottenuto dopo la conversione.
Mentre per convertire usando phantomjs, è sufficiente scaricare (in base al proprio sistema operativo) phantomjs da qui spostare la dir ottenuta dopo la decompressione in una posizione sul proprio file system ed eseguire nel proprio script PHP le seguenti istruzioni:
chdir('path/to/phantomjs'); /* per spostarsi nella dir dove abbiamo il nostro phantomjs */
exec("phantomjs rasterize.js $url /path/where/save/my.png); /* per eseguire phantomjs */
Da notare nel metodo exec:
- phantomjs è la chiamata al file exe contenuto nella dir
- rasterize.js è uno script JavaScript che troviamo nella cartella example dopo aver scaricato la libreria
- $url è una variabile all’URL dove abbiamo il nostro SVG
- è possibile aggiungere altri parametri all’esecuzione di phantomjs, per approfondire vedere la documentazione
Per quanto riguarda questa soluzione direi che sembra un po’ macchinosa, ma il risultato devo dire che è stato soddisfacente.
Convertire SVG in PNGConvertire SVG in PNG" tw:url="http://www.alessandrolanza.com/2011/12/21/come-convertire-un-svg-in-png/">