diff --git a/README.md b/README.md index 24574fa..4a26628 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # imagemarkpengent -![alt text](readme/images/top.png) +![alt text](./readme/images/top.png) This is the README for your extension "imagemarkpengent". After writing up a brief description, we recommend including the following sections. diff --git a/docs/pg_task.md b/docs/pg_task.md index 76ac0d9..6ec5854 100644 --- a/docs/pg_task.md +++ b/docs/pg_task.md @@ -32,14 +32,16 @@ VSCode拡張機能「ImageMarkPengent」の実装タスク一覧です。 - [x] 対象拡張子を `.png` / `.jpg` / `.jpeg` に限定 ### 2. WebViewで画像表示 -- [ ] コマンド実行時にWebViewパネルを開く -- [ ] 画像ファイルを `` または `` で表示 -- [ ] 画像の上に描き込み可能な `canvas` を重ねる +- [x] コマンド実行時にWebViewパネルを開く +- [x] 画像ファイルを `` または `` で表示 +- [x] 画像の上に描き込み可能な `canvas` を重ねる + + ### 3. 赤丸マーク描画機能 -- [ ] WebView内でJavaScriptにより `` へ赤丸を描画 -- [ ] クリック座標を取得し、赤丸を描画・保持 -- [ ] 複数マークの描画・再描画に対応 +- [x] WebView内でJavaScriptにより `` へ赤丸を描画 +- [x] クリック座標を取得し、赤丸を描画・保持 +- [x] 複数マークの描画・再描画に対応 ### 4. 加工画像の保存機能 - [ ] WebViewに「保存」ボタンを設置 @@ -47,10 +49,3 @@ VSCode拡張機能「ImageMarkPengent」の実装タスク一覧です。 - [ ] `vscode.postMessage()` で拡張機能側に送信 - [ ] 拡張機能側でファイル保存(別名保存も対応) ---- - -## 今後の拡張案(任意) -- 番号付きマーカーや矢印の追加 -- マークの色やサイズ変更 -- Undo/Redo機能 -- 他画像フォーマット対応 \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index 605b829..0ad4dc1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -37,6 +37,29 @@ export function activate(context: vscode.ExtensionContext) { const imageSrc = panel.webview.asWebviewUri(uri); panel.webview.html = getWebviewContent(imageSrc.toString()); + + // WebViewからのメッセージ受信(保存処理) + panel.webview.onDidReceiveMessage(async (message) => { + if (message.type === 'save-image' && message.dataUrl) { + // ファイル保存ダイアログを表示 + const uriSave = await vscode.window.showSaveDialog({ + filters: { 'PNG Images': ['png'] }, + saveLabel: '画像として保存' + }); + if (!uriSave) return; + // dataUrlからbase64部分を抽出 + const base64 = message.dataUrl.replace(/^data:image\/png;base64,/, ''); + const buffer = Buffer.from(base64, 'base64'); + const fs = require('fs'); + fs.writeFile(uriSave.fsPath, buffer, (err: any) => { + if (err) { + vscode.window.showErrorMessage('画像の保存に失敗しました: ' + err.message); + } else { + vscode.window.showInformationMessage('画像を保存しました: ' + uriSave.fsPath); + } + }); + } + }); }); context.subscriptions.push(disposable); diff --git a/src/webviewContent.ts b/src/webviewContent.ts index 44c2c9f..a1e7fcb 100644 --- a/src/webviewContent.ts +++ b/src/webviewContent.ts @@ -30,6 +30,7 @@ export function getWebviewContent(imageSrc: string): string { +