@@ -17,13 +17,13 @@ export abstract class Convert {
17
17
if ( selection !== undefined && ! selection . isEmpty ) {
18
18
const imgSrc = editor . document . getText ( selection ) ;
19
19
let filePath = '' ;
20
- const uriDecoded = decodeURI ( imgSrc . replace ( / f i l e : \/ + / i, '' ) ) . replace ( / % 3 A / i, ':' ) ;
21
- if ( this . fileExists ( uriDecoded ) ) {
20
+ const uriDecoded = decodeURI ( imgSrc . replace ( / f i l e : \/ + / i, '' ) ) . replace ( / % 3 A / i, ':' ) ;
21
+ if ( this . fileExists ( uriDecoded ) ) {
22
22
filePath = uriDecoded ;
23
23
}
24
24
else {
25
25
const workspaceFolder = this . getWorkspaceFolder ( ) ;
26
- if ( this . fileExists ( `${ workspaceFolder } /${ imgSrc } ` ) ) {
26
+ if ( this . fileExists ( `${ workspaceFolder } /${ imgSrc } ` ) ) {
27
27
filePath = `${ workspaceFolder } /${ imgSrc } ` ;
28
28
}
29
29
}
@@ -37,7 +37,7 @@ export abstract class Convert {
37
37
vscode . window . showInformationMessage ( `File not found: ${ imgSrc } ` ) ;
38
38
}
39
39
}
40
- else {
40
+ else {
41
41
vscode . window . showInformationMessage ( `Nothing is selected. Select the image src in the HTML to inline it as a data uri.` ) ;
42
42
}
43
43
}
@@ -54,11 +54,30 @@ export abstract class Convert {
54
54
const imageContent = fs . readFileSync ( filename ) ;
55
55
const base64EncodeImage = Base64 . toBase64 ( imageContent . toString ( ) ) ;
56
56
const extension = path . extname ( filename )
57
- return `data:image/${ extension } ;base64,${ base64EncodeImage } ` ;
57
+ const mimetype = Convert . getMimeTypeFromExtension ( extension ) ;
58
+ return `data:${ mimetype } ;base64,${ base64EncodeImage } ` ;
59
+ }
60
+
61
+ private static getMimeTypeFromExtension ( extension : string ) : string {
62
+ switch ( extension . toLowerCase ( ) ) {
63
+ case '.gif' :
64
+ return 'image/gif' ;
65
+ case '.ico' :
66
+ return 'image/vnd.microsoft.icon' ;
67
+ case '.jpg' :
68
+ case '.jpeg' :
69
+ return 'image/jpeg' ;
70
+ case '.png' :
71
+ return 'image/png' ;
72
+ case '.svg' :
73
+ return 'image/svg+xml' ;
74
+ default :
75
+ return '' ;
76
+ }
58
77
}
59
78
60
79
private static fileExists ( filename : string ) : boolean {
61
- try {
80
+ try {
62
81
return fs . lstatSync ( filename ) . isFile ( ) ;
63
82
} catch {
64
83
return false ;
0 commit comments