Опитах се да го използвам 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 изображения:
Фиксирани размери: Изображения, които имат
width
иheight
атрибути. Chrome може да показва тези размери перфектно и да преобразува посочените единици в пиксели.Пропорционални размери: SVG изображения с a
viewBox
атрибут. Chrome показва размера на такива изображения, увеличен до300x150
, Така се показва изображение с съотношение 16: 9267x150
.Няма размери: 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];