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)
需要强制转换值,否则它们将返回一个对象.
我有同样的问题,因为我找不到答案,发明并解决如下:
<?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 文件是在 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">
...
Run Code Online (Sandbox Code Playgroud)
多亏了这一点,我可以获得宽度和高度值。
我使用substr因为$svgfile[width]返回带有“px”后缀的值。我还可以使用 viewBox 值并将其拆分以获取值。
来自智利圣地亚哥的问候
关于尺寸,基本上有三种不同类型的SVG图像:
固定尺寸:具有width和height属性的图像。Chrome可以完美显示这些尺寸,并将指定的单位转换为像素。
比例尺寸:具有viewBox属性的SVG图像。Chrome显示此类图像的大小最大为300x150。因此比例为16:9的图像显示为267x150。
无尺寸: SVG图像没有width,height和viewBox。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()方法的源代码,以查看库如何确定尺寸。