Skip to content

Commit be477c7

Browse files
committed
Bugfix: Correct mimetype is now used in the datauri
Now supporting .ico files.
1 parent 5c40ee4 commit be477c7

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"menus": {
4444
"explorer/context": [
4545
{
46-
"when": "resourceExtname == .png || resourceExtname == .jpg || resourceExtname == .jpeg || resourceExtname == .svg || resourceExtname == .gif",
46+
"when": "resourceExtname == .png || resourceExtname == .jpg || resourceExtname == .jpeg || resourceExtname == .svg || resourceExtname == .gif || resourceExtname == .ico",
4747
"command": "vscode-imagetodatauri.imageToDataUriConvertFile",
4848
"group": "6_copypath"
4949
}

src/Convert.ts

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ export abstract class Convert {
1717
if (selection !== undefined && !selection.isEmpty) {
1818
const imgSrc = editor.document.getText(selection);
1919
let filePath = '';
20-
const uriDecoded = decodeURI(imgSrc.replace(/file:\/+/i, '')).replace(/%3A/i,':');
21-
if(this.fileExists(uriDecoded)) {
20+
const uriDecoded = decodeURI(imgSrc.replace(/file:\/+/i, '')).replace(/%3A/i, ':');
21+
if (this.fileExists(uriDecoded)) {
2222
filePath = uriDecoded;
2323
}
2424
else {
2525
const workspaceFolder = this.getWorkspaceFolder();
26-
if (this.fileExists(`${workspaceFolder}/${imgSrc}`)){
26+
if (this.fileExists(`${workspaceFolder}/${imgSrc}`)) {
2727
filePath = `${workspaceFolder}/${imgSrc}`;
2828
}
2929
}
@@ -37,7 +37,7 @@ export abstract class Convert {
3737
vscode.window.showInformationMessage(`File not found: ${imgSrc}`);
3838
}
3939
}
40-
else{
40+
else {
4141
vscode.window.showInformationMessage(`Nothing is selected. Select the image src in the HTML to inline it as a data uri.`);
4242
}
4343
}
@@ -54,11 +54,30 @@ export abstract class Convert {
5454
const imageContent = fs.readFileSync(filename);
5555
const base64EncodeImage = Base64.toBase64(imageContent.toString());
5656
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+
}
5877
}
5978

6079
private static fileExists(filename: string): boolean {
61-
try{
80+
try {
6281
return fs.lstatSync(filename).isFile();
6382
} catch {
6483
return false;

0 commit comments

Comments
 (0)