js實現svg圖形轉存爲圖片下載[轉]

咱們知道canvas畫布能夠很方便的js原生支持轉爲圖片格式並下載,可是svg矢量圖形則並無這方面原生的支持。
研究過HighChart的svg圖形的圖片下載機制,其實現原理大致是瀏覽器端收集SVG代碼信息,併發送到到服務器端,由後端程序轉換成圖片格式後,以流的形式反射給瀏覽器端下載。javascript

最近在項目中有需求將一個非HighChart的SVG地圖轉存爲圖片並下載的功能。
本但願模擬HighChart的原理實現,但是研究發現,該地圖的SVG代碼信息多達兩萬字節,然而HighChart後端製圖程序卻有着字節數限制,因此就不能這麼處理了。html

而後國外社區討論的方法也可能是先後端協同處理來完成這個功能的,這樣實現會比較重, 並且部署不便。java

通過一番搜尋,終於發現一個不依賴任何外部庫,框架,同時僅僅經過瀏覽器端js便能實現的方法。 代碼實現的具體來源地址已經忘記了, 這裏保留代碼原創做者的版權哈。canvas

首先,咱們約定SVG的上下文結構是以下的:後端

<div class="svg-wrap"> <svg>...</svg> </div> 

而後,咱們就能夠經過以下代碼來將svg圖形轉爲圖片並下載了:瀏覽器



原文地址:http://來源地址已忘記,國外社區找到的var svgXml = $('.svg-wrap').html(); var image = new Image(); image.src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svgXml))); //給圖片對象寫入base64編碼的svg流 var canvas = document.createElement('canvas'); //準備空畫布 canvas.width = $('.svg-wrap svg').width(); canvas.height = $('.svg-wrap svg').height(); var context = canvas.getContext('2d'); //取得畫布的2d繪圖上下文 context.drawImage(image, 0, 0); var a = document.createElement('a'); a.href = canvas.toDataURL('image/png'); //將畫布內的信息導出爲png圖片數據 a.download = "MapByMathArtSys"; //設定下載名稱 a.click(); //點擊觸發下載
相關文章
相關標籤/搜索