我試圖在SVG文件上使用getimagesize()
,但失敗了。如何獲得PHP中SVG圖片的寬度和高度?
我知道SVG是「Scalable Vector Graphics」,但我發現Google Chrome的「Review elements」可以很好地獲得SVG圖片的尺寸,所以我懷疑這也可以在PHP中使用。
如果難以得到尺寸,有什麼方法可以判斷SVG圖片是垂直還是水平?
我試圖在SVG文件上使用getimagesize()
,但失敗了。如何獲得PHP中SVG圖片的寬度和高度?
我知道SVG是「Scalable Vector Graphics」,但我發現Google Chrome的「Review elements」可以很好地獲得SVG圖片的尺寸,所以我懷疑這也可以在PHP中使用。
如果難以得到尺寸,有什麼方法可以判斷SVG圖片是垂直還是水平?
問題是:SVG圖像沒有一個「大小」,你可能正在考慮的意義上。另一方面,它們具有高寬比。
此比率通常可在viewBox
屬性中找到。
另一方面,如果viewBox
屬性不存在於根SVG元素上,則圖像比率非常不容易確定。
編輯:
邊注:之所以鉻爲您提供了完美的座標不一定是因爲它看起來在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值並分割它來獲取值。從聖地亞哥,智利
'$ svgfile = simplexml_load_file($ imageFileName);''list($ x_start,$ y_start,$ x_end,$ y_end)= explode('',$ svgfile ['viewBox']);' –
我喜歡這個解決方案,但是我已經看到寬度= 100%和高度= 100%的svg文件,可能會被考慮。 – Jonny
解決方法:刪除高度和寬度中任何字母數字符號(「px」,「%」等):$ svgwidth = preg_replace(「/ [^ 0-9,。] /」,「」,$ svgfile [width] ); $ svgheight = preg_replace(「/ [^ 0-9,。] /」,「」,$ svgfile [height]); – Jonny
問候關於尺寸基本上有三種不同類型的SVG圖像的:
固定尺寸:有width
和height
屬性圖像。Chrome可以完美顯示這些尺寸,並將指定的單位轉換爲像素。
比例尺寸:具有viewBox
屬性的SVG圖像。 Chrome顯示最大化爲300x150
的這種圖像的大小。因此,16:9比例的圖像顯示爲267x150
。
無尺寸: SVG圖像而不width
,height
和viewBox
。 Chrome(以及其他瀏覽器)對這些圖像使用默認大小300x150
。
這是可以做到用PHP的DOM extension閱讀SVG圖像的內容,並從上述應用的規則獲得與PHP的尺寸。我寫的PHP庫contao/imagine-svg所做的正是這一點,可以如下使用:
$size = (new Contao\ImagineSvg\Imagine)
->open('/path/to/image.svg')
->getSize();
echo $size->getWidth();
echo $size->getHeight();
如果你不想依靠第三方庫,你可以看看source code of the getSize()
method怎麼看圖書館決定尺寸。
@Williham Totland,我已經閱讀過'viewbox',但似乎'viewbox'也應該手動設置'Dimensions',而不是自動的。如何將'SVG'轉換爲'viewbox''xml文件'?它應該保持圖像寬高比。謝謝。 – cj333
@ cj333:解析錯誤。 –
@Williham Totland,@Brian,對不起,我還不知道如何使用它。作爲'viewbox'的例子,如果我知道'width =「500」height =「300」'我可以很容易地得到它。但真實情況是我不知道它。我只知道它的URL是http:// upload.wikimedia.org/wikipedia/commons/6/6c/Cog-Scripted-svg.svg' – cj333