Saltar al contenido

¿Cómo se obtiene el ancho y el alto de una imagen SVG en PHP?

Solución:

Un SVG es simplemente un archivo XML, por lo que las librerías GD no serán de ninguna ayuda.

Simplemente debería poder analizar el archivo XML para obtener dichas propiedades.

$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);

Los valores deben emitirse o devolverán un objeto.

La cuestión es que las imágenes SVG no tienen un “tamaño” en el sentido que probablemente estás pensando. Por otro lado, TIENEN una relación entre alto y ancho.

Esta relación generalmente se puede encontrar en el viewBox atributo.

Si, por otro lado, el viewBox El atributo no está presente en el elemento SVG raíz, la relación de la imagen no es trivial de determinar.

Editar:

Nota al margen: la razón por la que Chrome te da coordenadas perfectas no es necesariamente porque mira el SVG para determinar el tamaño; muy bien podría ser un simple resultado de eso configuración el tamaño.

Aunque el elemento SVG tiene height y width atributos, es posible que estos no se especifiquen como píxeles, sino como una serie de unidades, por lo que no son necesariamente de mucha ayuda.

En cuanto a las dimensiones, existen básicamente tres tipos diferentes de imágenes SVG:

  1. Dimensiones fijas: Imágenes que tienen width y height atributos. Chrome puede mostrar estas dimensiones perfectamente y convierte las unidades especificadas en píxeles.

  2. Dimensiones proporcionales: Imágenes SVG con un viewBox atributo. Chrome muestra el tamaño de dichas imágenes maximizado para 300x150. Entonces, una imagen con una proporción de 16: 9 se muestra como 267x150.

  3. Sin dimensiones: Imágenes SVG sin width, height y viewBox. Chrome (y otros navegadores también) utilizan un tamaño predeterminado de 300x150 para tales imágenes.

Es posible obtener las dimensiones con PHP leyendo el contenido de la imagen SVG con la extensión DOM de PHP y aplicando las reglas de arriba. Escribí la biblioteca PHP contao / imagine-svg que hace exactamente eso y se puede usar de la siguiente manera:

$size = (new ContaoImagineSvgImagine)
    ->open('/path/to/image.svg')
    ->getSize();
echo $size->getWidth();
echo $size->getHeight();

Si no desea depender de una biblioteca de terceros, puede consultar el código fuente del getSize() método para ver cómo la biblioteca determina las dimensiones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *