如何在PHP中获得SVG图片的宽度和高度?

cj3*_*333 14 php svg dimensions

我试图getimagesize()在SVG文件上使用,但它失败了.

我知道SVG是"可缩放矢量图形",但我发现谷歌Chrome的"评论元素"可以完美地获得SVG图片的尺寸,所以我怀疑这在PHP中也是可能的.

如果难以获得尺寸,有没有办法判断SVG图像是垂直还是水平?

Bri*_*ian 13

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);
Run Code Online (Sandbox Code Playgroud)

需要强制转换值,否则它们将返回一个对象.


Wil*_*and 10

问题是:SVG图像在您可能正在考虑的意义上没有"大小".另一方面,它们具有高宽比.

通常可以在viewBox属性中找到此比率.

另一方面,如果viewBox根SVG元素上不存在属性,则图像比率非常难以确定.

编辑:

附注:Chrome为您提供完美坐标的原因不一定是因为它会查看SVG来确定大小; 它很可能是设置大小的简单结果.

虽然SVG元素确实有heightwidth属性,这些可能不被指定为像素,但任意数量的单位,所以他们不一定是很大的帮助.


Pat*_*oel 5

我有同样的问题,因为我找不到答案,发明并解决如下:

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

请注意,我使用的 SVG 文件是在 Adob​​e 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">
...
Run Code Online (Sandbox Code Playgroud)

多亏了这一点,我可以获得宽度和高度值。

我使用substr因为$svgfile[width]返回带有“px”后缀的值。我还可以使用 viewBox 值并将其拆分以获取值。

来自智利圣地亚哥的问候

  • `$svgfile = simplexml_load_file($imageFileName);``list($x_start, $y_start, $x_end, $y_end) = expand(' ', $svgfile['viewBox']);` (4认同)

aus*_*usi 5

关于尺寸,基本上有三种不同类型的SVG图像:

  1. 固定尺寸:具有widthheight属性的图像。Chrome可以完美显示这些尺寸,并将指定的单位转换为像素。

  2. 比例尺寸:具有viewBox属性的SVG图像。Chrome显示此类图像的大小最大为300x150。因此比例为16:9的图像显示为267x150

  3. 无尺寸: SVG图像没有widthheightviewBox。Chrome(以及其他浏览器)300x150对此类图像使用默认大小。

可以通过读取PHP DOM扩展的SVG图像的内容并从上面应用规则来获取PHP的尺寸。我编写了PHP库contao / imagine-svg,它确实做到了这一点,并且可以按以下方式使用:

$size = (new Contao\ImagineSvg\Imagine)
    ->open('/path/to/image.svg')
    ->getSize();
echo $size->getWidth();
echo $size->getHeight();
Run Code Online (Sandbox Code Playgroud)

如果您不想依赖第三方库,则可以查看getSize()方法源代码,以查看库如何确定尺寸。