2017-01-18 61 views
0

我嘗試使用動態生成的svg創建一個svg圖釘(example)。不幸的是,它不能在地圖上正確顯示引腳。我四處挖掘,發現bing地圖API將src設置爲base64編碼圖像。svg in data uri not rendered

所以我試圖將圖像源複製到js小提琴中,看看bing maps API或瀏覽器是否有問題。 它正在爲簡單的相似圖片

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> 
    <circle id="circle" cx="25" cy="25" r="25" /> 
</svg> 

但更復雜一點的圖像不會呈現

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"> 
    <defs> 
     <circle id="circle" cx="25" cy="25" r="25" /> 
    </defs> 
    <clipPath id="clip"></clipPath> 
    <image xlink:href="https://www.gravatar.com/avatar/08b73d0a58fc120a8cc8dc561d83b3d6.jpg?s=50&d=mm" x="0" y="0" height="50" width="50" /> 
</svg> 

JS小提琴:https://jsfiddle.net/w1yn9Lo8/6/

兩個圖像得到渲染好的,如果我貼他們直接轉換成HTML。這裏有什麼問題?

+0

SVG圖像使用帆布標記在Bing地圖中不受支持,因爲地圖控件需要使用SVG並立即在HTML畫布上繪製它們。因爲這樣的圖像沒有機會加載。 – rbrundritt

回答

1

當您使用SVG文件作爲數據URI時,您不能有任何外部引用,因此在將包裝SVG文件編碼爲數據URI之前,您必須將jpg編碼爲數據uri。

+0

有沒有一種很好的方式,而不需要手動通過http請求圖像? –

+0

取決於gravatar是否支持CORS,如果它可以通過XMLHttpRequest在JavaScript中執行。 –

0

問題是pushpin的SVG內容無法繪製卸載的圖像,即使您在SVG中使用內部foreignObject。

我會用畫布代替SVG。您可以在其中使用所有畫布基元。

我的解決辦法是有:Bing Maps API v8 - pushpin SVG URI image

  • 預加載的圖像到對象(對象的陣列)
  • 繪製圖像和/或另一個基元在帆布和在圖釘