CatPtain commited on
Commit
3065c1d
·
verified ·
1 Parent(s): f184abd

Upload svg2Base64.ts

Browse files
Files changed (1) hide show
  1. frontend/src/utils/svg2Base64.ts +27 -4
frontend/src/utils/svg2Base64.ts CHANGED
@@ -48,8 +48,31 @@ const encode = (input: string) => {
48
  }
49
 
50
  export const svg2Base64 = (element: Element) => {
51
- const XMLS = new XMLSerializer()
52
- const svg = XMLS.serializeToString(element)
53
-
54
- return PREFIX + encode(svg)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
 
48
  }
49
 
50
  export const svg2Base64 = (element: Element) => {
51
+ try {
52
+ // 克隆元素以避免修改原始DOM
53
+ const clonedElement = element.cloneNode(true) as Element;
54
+
55
+ // 确保SVG有正确的命名空间
56
+ if (clonedElement.tagName.toLowerCase() === 'svg') {
57
+ clonedElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
58
+ clonedElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
59
+ }
60
+
61
+ const XMLS = new XMLSerializer();
62
+ const svg = XMLS.serializeToString(clonedElement);
63
+
64
+ if (!svg || svg.length === 0) {
65
+ throw new Error('SVG serialization returned empty string');
66
+ }
67
+
68
+ const encoded = encode(svg);
69
+ if (!encoded) {
70
+ throw new Error('Base64 encoding failed');
71
+ }
72
+
73
+ return PREFIX + encoded;
74
+ } catch (error) {
75
+ console.error('svg2Base64 failed:', error);
76
+ throw error;
77
+ }
78
  }