2017-02-02 48 views
0

我正在搞一些SVG和PHP代碼,我發現了一個令人討厭的問題,我無法解決。
我有一個SVG圖像,其中有一些形狀。通過fill屬性和def標籤,我可以使用簡單的GET變量將紋理成功應用到所需的形狀。因此,這是我的SVG:PHP沒有加載SVG圖案紋理

SVG image test

而且,如果我想申請任何紋理,我可以完全看到它:

SVG with texture

那麼,問題是,當我嵌入帶有img標籤的圖像,我看不到紋理。
我配置了一個PHP文件,所以如果我將一些值傳遞給文件,我可以改變顏色和紋理。例如:?

  • test.php的顏色= FF0000會使我的形象與紅方
  • test.php的拍拍= PAT1會使我的形象與圖案我有一個模式?文件夾

這個偉大的工程,如果我想顯示圖像,但是,如果我把它放在一個img標籤內,它僅適用於顏色,所以:

  • <img src="test.php?color=FF0000">將成功地使我的形象有一個紅色的方形
  • <img src="test.php?pat=pat1">將不會呈現我的質感;它會顯示一個白色

這是我test.php文件(PHP與SVG代碼)的平方:

<?php 
header('Content-type: image/svg+xml'); 
echo '<?xml version="1.0" encoding="utf-8"?>'; 
?> 
<svg version="1.1" id="figure" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
    viewBox="0 0 612 345" style="enable-background:new 0 0 612 345;" xml:space="preserve"> 
    <defs> 
     <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100"> 
      <image xlink:href="img/patterns/<?=isset($_GET['pat']) ? $_GET['pat'] : 'pat1'?>.jpg" x="0" y="0" width="100" height="100" /> 
     </pattern> 
    </defs> 
<style type="text/css"> 
    .st0{stroke:#000000;stroke-miterlimit:10;} 
    .st1{fill:#62C3A9;stroke:#000000;stroke-miterlimit:10;} 
    .st2{fill:#B8D433;stroke:#000000;stroke-miterlimit:10;} 
</style> 
    <rect fill="<?=isset($_GET['color']) ? '#' . $_GET['color'] : 'url(#img1)'?>" id="square" x="142.3" y="63" class="st0" width="125.3" height="167.3"/> 
    <ellipse id="round" class="st1" cx="319.3" cy="134.7" rx="47" ry="53"/> 
    <polygon id="polygon" class="st2" points="327,237.7 261.5,268.4 202.2,227.1 208.3,155 273.8,124.3 333.1,165.6 "/> 
</svg> 

我缺少什麼?我一直在嘗試一個小時來找到一個解決方案,但我還沒有找到任何有用的東西。

Preview on Chrome dev tools

這是預覽我得到的Chrome瀏覽器開發控制檯上,當我檢查圖像,在左邊用顏色和與紋理的權利。

謝謝!

+0

那麼肯定它的瀏覽器不是PHP導致的問題? – RiggsFolly

回答

2

當您將SVG顯示爲圖像,即通過標記或作爲背景圖像時,它必須在單個文件中完成,即不允許外部引用。

你不得不對外形象

xlink:href="img/patterns/<?=isset($_GET['pat']) ? $_GET['pat'] : 'pat1'?>.jpg" 

轉換爲data URI這個工作。

+0

是的,就是這樣!如果有人感興趣,我在[如何使用PHP將圖像轉換爲數據URI](https://paulund.co.uk/convert-image-base64-php)中使用了這篇文章。感謝您的幫助,它像一個魅力! – peregraum