js svg轉圖片格式


js svg轉圖片格式

1.情景展示

  閑來無事的時候,發現chrome擴展程序里面有圖像,本想下載下來,卻發現文件格式是svg格式,如何將svg文件改成圖片格式?

chrome-extension://jlgkpaicikihijadgifklkbpdajbkhjo/image/rating/1-stars.svg

2.解決方案

  第一,JavaScript文件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
( function (global) {
     global.svgToImg = function (svgHtml) {
         this .svgHtml = svgHtml;
     };
     global.svgToImg.prototype = {
         /**
          * svg轉圖片
          * @description
          * 1.將svg轉base64;
          * 2.將base64格式的svg轉指定的圖片格式並下載
          * @param fileName
          * 圖片名稱
          * @param imgType
          * 圖片類型:jpg/png/bmp
          *
          */
         change: function (fileName,imgType) {
             var This = this ;
             //1.給svg標簽添加屬性:version和xmlns
             [
                 [ 'version' , 1.1],
                 [ 'xmlns' , "http://www.w3.org/2000/svg" ],
             ].forEach( function (item){
                 This.svgHtml.setAttribute(item[0], item[1]);
             });
             // 2.獲取到svg標簽+標簽內的所有元素
             var str = This.svgHtml.parentNode.innerHTML;
  
             //3.創建img
             var img = document.createElement( 'img' );
  
             // 4.svg格式的base64圖像
             img.setAttribute( 'src' , 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(str))));
             //base64格式的svg
             //document.getElementById('baseSvg').src='data:image/svg+xml;base64,'+ btoa(unescape(encodeURIComponent(str)));
             
             // 5.轉換成指定圖片格式
             img.onload = function (){
                 // 1.創建canvas
                 var canvas = document.createElement( 'canvas' );
                 var context = canvas.getContext( "2d" );
  
                 canvas.width = img.width;
                 canvas.height = img.height;
                 // 2.根據base64格式的svg生成canvas
                 context.drawImage(img, 0, 0);
                 
                 // 3.將canvas轉字符串(按指定好的圖片格式)
                 var canvasData = canvas.toDataURL( "image/" + imgType);
                 // 4.創建圖片元素
                 var img2 = document.createElement( 'img' );
                 // 5.生成圖片
                 img2.setAttribute( 'src' , canvasData);
                 
                 // 6.下載該圖片
                 img2.onload = function () {
                     var a = document.createElement( "a" );
                     // 下載
                     a.download = fileName + "." + imgType;
                     a.href = img2.getAttribute( 'src' );
                     a.click();
                 };
             };
         }
     }
}( this )); 

  第二,HTML頁面。  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< body >
     < div id="svgContainer">
         <!-- 這里存放你的svg標簽 -->
         < svg xmlns="http://www.w3.org/2000/svg" width="86" height="98" viewBox="0 0 86 98">
             < g fill="none" fill-rule="evenodd">
                 < circle cx="42.8" cy="42.8" r="42.8" fill="#FED230"/>
                 < path stroke="#000" stroke-linecap="round" stroke-width="2.4" d="M33.6 35.4a6.6 6.6 0 0 0-13.2 0M64 35.4a6.6 6.6 0 0 0-13.2 0"/>
                 < circle cx="42.8" cy="66.8" r="8" fill="#000"/>
                 < rect width="11.6" height="67.6" x="21.2" y="30" fill="#1C85FF" fill-opacity=".694" rx="5.8"/>
                 < rect width="11.6" height="67.6" x="51.6" y="30" fill="#1C85FF" fill-opacity=".694" rx="5.8"/>
             </ g >
         </ svg >
     </ div >
     < button onclick="change()">change</ button >
     <!-- base64svg -->
     < img src="" id="baseSvg"/>
</ body >

  第三,引入JS代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< script src="svgToImg.js"></ script >
< script >
     var svgToImg;
     window.onload = function() {
         // 獲取到svg標簽
         var svg = document.querySelector('svg');
         // 實例化對象
         svgToImg = new svgToImg(svg);  
     }
     
     // 下載
     function change() {
         // svg轉圖片
         svgToImg.change('Marydon','jpg');
     }
</ script >

3.效果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM