/ / Как се получава ширината и височината на SVG картина в PHP? - php, svg, измерения

Как получавате ширината и височината на SVG картина в PHP? - php, svg, размери

Опитах се да го използвам getimagesize() в SVG файл, но не успя.

Знам, че SVG е „Scalable Vector Graphics“, но считам, че „елементите за преглед“ на Google Chrome могат напълно да получат размерите на SVG картина, така че предполагам, че това е възможно и в PHP.

Ако е трудно да се получат размерите, има ли начин да се прецени дали SVG картината е вертикална или хоризонтална?

Отговори:

8 за отговор № 1

Работата е там: SVG изображенията нямат "размер" в смисъла, в който вероятно си мислите.

Това съотношение обикновено може да бъде намерено в viewBox атрибут.

Ако, от друга страна, viewBox атрибут не присъства в основния SVG елемент, съотношението на изображението е много нетривиално за определяне.

Редактиране:

Странична бележка: Причината, поради която Chrome ви дава идеални координати, не е задължително, защото изглежда, че SVG определя размера, но може да е просто резултат от него обстановка размерът.

Въпреки че SVG елементът има height и width атрибути, те може и да не са определени като пиксели, а за някой от броя единици, така че те не са непременно много помощни.


9 за отговор № 2

SVG е просто XML файл, така че GD libs няма да е от помощ!

Трябва просто да можете да анализирате 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);

Стойностите трябва да бъдат подадени или ще върнат обект.


3 за отговор № 3

И аз имах същия въпрос, тъй като не можех да намеря отговор, измислих и реших, както следва:

<?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 стойност и да го разделя, за да получа стойностите.

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


2 за отговор № 4

По отношение на размерите има три различни типа SVG изображения:

  1. Фиксирани размери: Изображения, които имат width и height атрибути. Chrome може да показва тези размери перфектно и да преобразува посочените единици в пиксели.

  2. Пропорционални размери: SVG изображения с a viewBox атрибут. Chrome показва размера на такива изображения, увеличен до 300x150, Така се показва изображение с съотношение 16: 9 267x150.

  3. Няма размери: SVG изображения без width, height и viewBox, Chrome (и други браузъри) използват размер по подразбиране от 300x150 за такива изображения.

Възможно е да получим размерите с PHP, като прочетете съдържанието на SVG изображението с PHP DOM разширение и прилагане на правилата от по-горе. Написах PHP библиотеката contao / представете си, SVG което прави точно това и може да се използва, както следва:

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

Ако не искате да разчитате на библиотека на трета страна, можете да разгледате изходния код на getSize() метод за да видите как библиотеката определя размерите.


0 за отговор № 5

Тук е бързо и мръсно Рязка рана да проверите размера на прозореца за показване с regex. В повечето случаи тя работи, но виждат и другите отговори, за да получите представа за нейните ограничения.

preg_match("#viewbox=[""]d* d* (d*) (d*)#i", file_get_contents("file.svg"), $d);
$width = $d[1];
$height = $d[2];