@@ -54,10 +54,16 @@ async function modifyImage(
54
54
imageFile : File ,
55
55
imageInfo : ImageInfo ,
56
56
) : Promise < ModifiedImage > {
57
- const fileBuffer = await imageFile . arrayBuffer ( ) ;
58
-
59
- const raw = imageInfo . raw ;
57
+ let fileBuffer : ArrayBuffer | string = await imageFile . arrayBuffer ( ) ;
60
58
const outputTitle = imageInfo . title ;
59
+ const image = sharp ( Buffer . from ( fileBuffer ) , { animated : false } ) ;
60
+ const metadata = await image . metadata ( ) ;
61
+ const raw = imageInfo . raw ;
62
+
63
+ if ( raw && metadata . format === "svg" ) {
64
+ fileBuffer = await imageFile . text ( ) ;
65
+ }
66
+
61
67
let outputWidth ;
62
68
let outputHeight ;
63
69
let outputFormat ;
@@ -67,13 +73,10 @@ async function modifyImage(
67
73
68
74
if ( raw ) {
69
75
imageBuffer = fileBuffer ;
70
- outputHeight = imageInfo . height ! ;
71
- outputWidth = imageInfo . width ! ;
72
- outputFormat = imageInfo . format ;
76
+ outputHeight = metadata . height ! ;
77
+ outputWidth = metadata . width ! ;
78
+ outputFormat = metadata . format ! ;
73
79
} else {
74
- const image = sharp ( Buffer . from ( fileBuffer ) , { animated : false } ) ;
75
- const metadata = await image . metadata ( ) ;
76
-
77
80
if ( ! imageInfo . height && ! imageInfo . width ) {
78
81
outputHeight = metadata . height ;
79
82
outputWidth = metadata . width ;
@@ -111,12 +114,21 @@ async function modifyImage(
111
114
outputFormat = modifiedInfo . format ;
112
115
}
113
116
114
- const buffer = Buffer . from ( imageBuffer ) . toString ( "base64" ) ;
117
+ let buffer , sizeKB , base64Format ;
118
+ if ( typeof imageBuffer === "string" ) {
119
+ sizeKB = imageBuffer . length / 1024 ;
120
+ buffer = btoa ( imageBuffer ) ;
121
+ base64Format = "data:image/svg+xml;base64," ;
122
+ } else {
123
+ sizeKB = imageBuffer . byteLength / 1024 ;
124
+ buffer = Buffer . from ( imageBuffer ) . toString ( "base64" ) ;
125
+ base64Format = `data:image/${ outputFormat } ;base64,` ;
126
+ }
115
127
116
128
return {
117
129
title : outputTitle ,
118
- previewUrl : `data:image/ ${ outputFormat } ;base64, ${ buffer } ` ,
119
- sizeKb : imageBuffer . byteLength / 1024 ,
130
+ previewUrl : `${ base64Format } ${ buffer } ` ,
131
+ sizeKb : sizeKB ,
120
132
format : outputFormat ,
121
133
height : outputHeight ,
122
134
width : outputWidth ,
0 commit comments