日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js实现svg图形转存为图片下载

發布時間:2024/7/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js实现svg图形转存为图片下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道canvas畫布可以很方便的js原生支持轉為圖片格式并下載,但是svg矢量圖形則并沒有這方面原生的支持。
研究過HighChart的svg圖形的圖片下載機制,其實現原理大體是瀏覽器端收集SVG代碼信息,并發送到到服務器端,由后端程序轉換成圖片格式后,以流的形式反射給瀏覽器端下載。

最近在項目中有需求將一個非HighChart的SVG地圖轉存為圖片并下載的功能。
本希望模擬HighChart的原理實現,可是研究發現,該地圖的SVG代碼信息多達兩萬字節,然而HighChart后端制圖程序卻有著字節數限制,所以就不能這么處理了。

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

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

首先,我們約定SVG的上下文結構是如下的:

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

然后,我們就可以通過如下代碼來將svg圖形轉為圖片并下載了:

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(); //點擊觸發下載

?

轉載于:https://www.cnblogs.com/jiangxiaobo/p/6007589.html

總結

以上是生活随笔為你收集整理的js实现svg图形转存为图片下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。