Come si ottiene la width e l'altezza di un'image SVG in PHP?

Ho provato a usare getimagesize() su un file SVG, ma non è riuscito.

So che SVG è "Scalable Vector Graphics", ma trovo che gli "Elementi di recensione" di Google Chrome possano perfettamente get le size di un'image SVG, quindi sospetto che ciò sia ansible anche in PHP.

Se è difficile get le size, c'è un modo per giudicare se un'image SVG è verticale o orizzontale?

Il fatto è che le immagini SVG non hanno una "dimensione" nel senso in cui probabilmente stai pensando. D'altra parte, hanno un rapporto altezza-width.

Questo rapporto di solito si trova nell'attributo viewBox .

Se, d'altra parte, l'attributo viewBox non è presente sull'elemento radice SVG, il rapporto image è altamente non banale da determinare.

Modificare:

Nota a margine: il motivo per cui Chrome ti offre le coordinate perfette non è necessariamente perché guarda l'SVG per determinare le size; potrebbe benissimo essere un risultato semplice impostando la dimensione.

Sebbene l'elemento SVG abbia attributi di height e width , questi potrebbero non essere specificati come pixel, ma uno qualsiasi di un numero di unità, quindi non sono necessariamente di grande aiuto.

Un SVG è semplicemente un file XML, quindi le librerie GD non saranno di alcun aiuto!

Dovresti semplicemente essere in grado di analizzare il file XML per get tali properties;.

 $xml = ' <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect x="90" y="10" width="400" height="280" style="fill: rgb(255,255,255); stroke: rgb(0,0,0); stroke-width: 1; " /> </svg>'; $xmlget = simplexml_load_string($xml); $xmlattributes = $xmlget->attributes(); $width = (string) $xmlattributes->width; $height = (string) $xmlattributes->height; print_r($width); print_r($height); 

I valori devono essere espressi o restituiranno un object.

Ho avuto la stessa domanda che non riuscivo a trovare una risposta, inventare e risolvere come segue:

 <?php $svgfile = simplexml_load_file("svgimage.svg"); $width = substr($svgfile[width],0,-2); $height = substr($svgfile[height],0,-2); ?> 

Si noti che il file SVG che ho usato è stato creato in Adobe Illustrator. Quindi, il codice svg dell'image inizia come segue:

 <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="400px" height="738px" viewBox="0 0 400 738" enable-background="new 0 0 400 738" xml:space="preserve"> ... 

Grazie a questo, ho potuto get valori di width e altezza.

E io uso substr perché $svgfile[width] restituisce il valore con suffisso "px". Potrei anche usare il valore viewBox e dividerlo per get i valori.

Saluti da Santiago, Cile