Я попытался использовать getimagesize()
в SVG-файле, но это не удалось.
Я знаю, что SVG – это «Масштабируемая векторная графика», но я обнаружил, что «Элементы обзора» Google Chrome могут получить размеры изображения SVG, поэтому я подозреваю, что это также возможно в PHP.
Если трудно получить размеры, есть ли способ оценить, является ли изображение SVG вертикальным или горизонтальным?
Дело в том, что изображения 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 и разделить его, чтобы получить значения.
Привет из Сантьяго, Чили