Как вы получаете ширину и высоту изображения SVG в PHP?

Я попытался использовать getimagesize() в SVG-файле, но это не удалось.

Я знаю, что SVG – это «Масштабируемая векторная графика», но я обнаружил, что «Элементы обзора» Google Chrome могут получить размеры изображения SVG, поэтому я подозреваю, что это также возможно в PHP.

Если трудно получить размеры, есть ли способ оценить, является ли изображение SVG вертикальным или горизонтальным?

Solutions Collecting From Web of "Как вы получаете ширину и высоту изображения SVG в PHP?"

Дело в том, что изображения SVG не имеют «размера» в том смысле, о котором вы, вероятно, думаете. С другой стороны, они имеют отношение высоты к ширине.

Это соотношение обычно можно найти в viewBox .

Если, с другой стороны, атрибут viewBox отсутствует в корневом элементе SVG, отношение изображения очень нетривиально для определения.

Редактировать:

Примечание: причина, по которой Chrome дает идеальные координаты, не обязательно потому, что она смотрит на SVG, чтобы определить размер; это вполне может быть простым результатом его установки размера.

Хотя элемент SVG имеет атрибуты height и width , они могут не указываться как пиксели, а любое из нескольких единиц, поэтому они не обязательно помогают.

SVG – это просто XML-файл, поэтому GD-библиотеки не помогут!

Вы должны просто проанализировать XML-файл, чтобы получить такие свойства.

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

Значения должны быть отброшены или они возвратят объект.

У меня был такой же вопрос, как я не мог найти ответ, изобретать и решать следующим образом:

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

Обратите внимание, что файл SVG, который я использовал, был создан в Adobe Illustrator. Итак, код svg изображения начинается следующим образом:

 <?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"> ... 

Благодаря этому я могу получить значения ширины и высоты.

И я использую substr потому что $svgfile[width] возвращает значение с суффиксом «px». Я мог бы также использовать значение viewBox и разделить его, чтобы получить значения.

Привет из Сантьяго, Чили