Skip to content

Commit d0a2552

Browse files
authored
Merge pull request #16 from andaoai/dev
Dev
2 parents b739dee + 064fd33 commit d0a2552

File tree

10 files changed

+1045
-381
lines changed

10 files changed

+1045
-381
lines changed

package-lock.json

Lines changed: 458 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "yolo-labeling-vs",
33
"displayName": "YOLO Labeling",
44
"description": "A VS Code extension for YOLO dataset labeling",
5-
"version": "0.0.51",
5+
"version": "0.0.54",
66
"publisher": "andaoai",
77
"license": "MIT",
88
"icon": "docs/images/icon.png",
@@ -131,6 +131,7 @@
131131
"@types/react-dom": "^18.2.0",
132132
"js-yaml": "^4.1.0",
133133
"react": "^18.2.0",
134-
"react-dom": "^18.2.0"
134+
"react-dom": "^18.2.0",
135+
"sharp": "^0.34.1"
135136
}
136137
}

src/model/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface ErrorMessage extends ExtensionToWebviewMessage {
3737

3838
// 从Webview到扩展的消息
3939
export interface WebviewToExtensionMessage extends WebviewMessage {
40-
command: 'save' | 'next' | 'previous' | 'loadImage' | 'getImageList' | 'reload' | 'openImageInNewTab' | 'openTxtInNewTab';
40+
command: 'save' | 'next' | 'previous' | 'loadImage' | 'getImageList' | 'reload' | 'openImageInNewTab' | 'openTxtInNewTab' | 'getImagePreviews';
4141
}
4242

4343
// 保存标签消息

src/services/ImageService.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as fs from 'fs';
22
import * as path from 'path';
33
import { CacheManager } from '../model/CacheManager';
44
import { ErrorHandler, ErrorType } from '../ErrorHandler';
5+
import sharp from 'sharp';
56

67
/**
78
* 图像服务类
@@ -92,4 +93,18 @@ export class ImageService {
9293
public clearCache(): void {
9394
this._imageCache.clear();
9495
}
96+
97+
/**
98+
* 生成图片缩略图,返回base64字符串(不带data:image/png;base64,前缀)
99+
*/
100+
public async generateThumbnail(imagePath: string, width: number, height: number): Promise<string> {
101+
// 检查文件是否存在
102+
await fs.promises.access(imagePath, fs.constants.R_OK);
103+
// 用 sharp 生成缩略图
104+
const buffer = await sharp(imagePath)
105+
.resize(width, height, { fit: 'cover' })
106+
.toFormat('png')
107+
.toBuffer();
108+
return buffer.toString('base64');
109+
}
95110
}

src/services/WebviewMessageHandler.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ export class WebviewMessageHandler {
7474
await this.handleOpenTxtInNewTabCommand(openTxtMessage);
7575
break;
7676

77+
case 'getImagePreviews':
78+
await this.handleGetImagePreviewsCommand(message);
79+
break;
80+
7781
default:
7882
console.warn(`Unknown command: ${extMessage.command}`);
7983
}
@@ -325,4 +329,21 @@ export class WebviewMessageHandler {
325329
);
326330
}
327331
}
332+
333+
/**
334+
* 处理批量获取图片缩略图命令
335+
*/
336+
private async handleGetImagePreviewsCommand(message: any): Promise<void> {
337+
const paths: string[] = message.paths || [];
338+
const previews: string[] = [];
339+
for (const p of paths) {
340+
try {
341+
const thumb = await this._imageService.generateThumbnail(p, 120, 80); // 120x80
342+
previews.push(thumb);
343+
} catch {
344+
previews.push(''); // 失败用空字符串
345+
}
346+
}
347+
this._webview.postMessage({ command: 'imagePreviews', previews });
348+
}
328349
}

0 commit comments

Comments
 (0)