P4 — 자체 서명 MSIX 자동화 - packaging/BuildAndSign.ps1: 인증서 생성→PFX export→MSIX 빌드→서명을 한 스크립트로 일관 처리. 기존 인증서 있으면 재사용. - Install-EverythingToJpeg.ps1: 기본 비밀번호 'EverythingToJpegDev' 자동 사용 (사용자 5대 PC 본인 사용 한정). - 검증: 53MB 서명된 MSIX 산출, signtool 정상 통과(DigiCert TimeStamp 박힘). P6 — Past Results 영구 저장 - HistoryStorage.cs: %LocalAppData%\EverythingToJpeg\history.jsonl 에 변환 결과 append. 시작 시 로드해서 _pastResults에 채움. - 첫 실행에만 데모 시드, 이후엔 실데이터만 표시. - Past Results의 Clear All은 영구 파일도 함께 삭제 (확인 다이얼로그 추가). P7 — 정리 + 단축키 - 사용 안 하는 ConvertWindow.xaml/.cs 폐기 (코드 600줄 제거). - KeyBinding 4개: Ctrl+O 파일 추가, Ctrl+Enter 변환, Esc 닫기, F5 새로고침. - RelayCommand 헬퍼 클래스로 단축키 ICommand 패턴 구현. P8 — Capability 자동 안내 - 시작 시 RequiresExternal Provider들의 가용성 비동기 체크. - 외부 도구 미설치 형식이 있으면 사이드바 footer에 "⚠ N개 형식이 외부 도구를 기다립니다 (Diagnose 참조)" 한 줄 표시. README — Phase 1~8 전체 진척, 단축키 표 정리. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
130 lines
5.6 KiB
Markdown
130 lines
5.6 KiB
Markdown
# EverythingToJpeg
|
|
|
|
Windows 우클릭 컨텍스트 메뉴에서 한 방에 JPEG로. PNG · GIF · BMP · TIFF · WebP · AVIF · HEIC · RAW · PSD · PDF · DOCX 를 지원합니다.
|
|
|
|
- **빠른 변환** — 다이얼로그 없이 원본 폴더의 `<원본명>_jpeg/` 하위에 즉시 저장
|
|
- **변환…** — 옵션 다이얼로그(품질, 출력 위치, 이름 충돌, 크기 제한, PDF DPI)
|
|
- 진행 상황 + 썸네일 + 드래그 & 드롭 (메인 창)
|
|
|
|
## 빠른 시작
|
|
|
|
### 1) 빌드
|
|
|
|
```powershell
|
|
# 솔루션 빌드
|
|
dotnet build EverythingToJpeg.slnx -c Release
|
|
|
|
# 단일 폴더 publish (framework-dependent, .NET 9 Desktop Runtime 필요)
|
|
dotnet publish src\EverythingToJpeg.App\EverythingToJpeg.App.csproj `
|
|
-c Release -r win-x64 --self-contained false -o publish
|
|
|
|
# .NET 런타임 동봉 (단일 사용자 배포가 편함)
|
|
dotnet publish src\EverythingToJpeg.App\EverythingToJpeg.App.csproj `
|
|
-c Release -r win-x64 --self-contained true `
|
|
-p:PublishSingleFile=false -o publish-self
|
|
```
|
|
|
|
산출물: `publish\EverythingToJpeg.exe`
|
|
|
|
### 2) 컨텍스트 메뉴 등록
|
|
|
|
`EverythingToJpeg.exe`를 한 번 실행 → "컨텍스트 메뉴 등록" 클릭. 또는 CLI:
|
|
|
|
```powershell
|
|
.\EverythingToJpeg.exe register
|
|
.\EverythingToJpeg.exe unregister
|
|
```
|
|
|
|
> Windows 11 메인 우클릭 메뉴가 아니라 "추가 옵션 표시(Shift+우클릭)" 메뉴에 노출됩니다. 메인 메뉴 노출은 Phase 2에서 IExplorerCommand + MSIX 로 추가 예정.
|
|
|
|
### 3) 사용
|
|
|
|
- 파일 우클릭 → "추가 옵션 표시" → **JPEG로 빠른 변환** 또는 **JPEG로 변환…**
|
|
- 또는 메인 창에 파일/폴더를 끌어다 놓기
|
|
|
|
## 지원 현황
|
|
|
|
| 형식 | 상태 | 참고 |
|
|
|---|---|---|
|
|
| PNG · BMP · JPEG · WebP · AVIF · PSD · TIFF · GIF · RAW(NEF/CR2/CR3/ARW/DNG/RAF/ORF/RW2/SRW/PEF) | ✅ 준비됨 | Magick.NET 14.x |
|
|
| HEIC · HEIF | ✅ 준비됨 | PhotoSauce + libheif 디코드 |
|
|
| PDF | ✅ 준비됨 | PDFtoImage(PDFium) |
|
|
| HTML · HTM | ✅ 준비됨 | WebView2 헤드리스 + CDP `Page.captureScreenshot` 풀페이지 |
|
|
| DOCX · DOC | ⚙ 외부 도구 필요 | Microsoft Word 또는 LibreOffice 자동 감지 |
|
|
| HWP · HWPX | ⚙ 외부 도구 필요 | LibreOffice + [H2Orestart](https://github.com/ebandal/H2Orestart) 확장 |
|
|
|
|
## 기술 스택
|
|
|
|
- **.NET 9 + WPF**, Windows 10.0.19041.0+
|
|
- UI: **WPF-UI 4.3** (Win11 Fluent 2 — Mica 백드롭, Segoe UI Variable 타입 램프)
|
|
- 변환 엔진: Magick.NET, PDFtoImage, PhotoSauce.MagicScaler + Libheif
|
|
|
|
## 로드맵
|
|
|
|
| 단계 | 상태 | 내용 |
|
|
|---|---|---|
|
|
| Phase 1 | ✅ | 레지스트리 컨텍스트 메뉴 (Win11 "추가 옵션 표시"), 핵심 변환, Fluent UI |
|
|
| Phase 2 | ✅ | C++ IExplorerCommand DLL + MSIX Sparse Package |
|
|
| Phase 3 | ✅ | HTML(WebView2), HWP/HWPX(LibreOffice + H2Orestart) 실구현 |
|
|
| Phase 4 | ✅ | **자체 서명 MSIX 자동화** — `packaging/BuildAndSign.ps1` 한 방으로 인증서 생성 + 서명 + 패키지 |
|
|
| Phase 5 | ✅ | GitHub 리모트 + Actions 릴리즈 워크플로 |
|
|
| Phase 6 | ✅ | Past Results 영구 저장 (`%LocalAppData%\EverythingToJpeg\history.jsonl`) |
|
|
| Phase 7 | ✅ | 단축키 (Ctrl+O 추가, Ctrl+Enter 변환, Esc 닫기, F5 새로고침), 코드 정리 |
|
|
| Phase 8 | ✅ | 시작 시 Provider 가용성 자동 체크, 사이드바에 외부 도구 필요 안내 |
|
|
|
|
## 키보드 단축키
|
|
|
|
| 키 | 동작 |
|
|
|---|---|
|
|
| Ctrl+O | 파일 추가 |
|
|
| Ctrl+Enter | Process Queue (변환 시작) |
|
|
| Esc | 창 닫기 |
|
|
| F5 | 통계 새로고침 |
|
|
| Active Queue 행 클릭 | 우측 Preview에 즉시 표시 |
|
|
| Past Results 행 클릭 | 원본 파일이 있으면 Preview 표시 |
|
|
|
|
## 두 가지 사용 방식
|
|
|
|
### A) Portable EXE — 가장 가벼움 (Phase 1)
|
|
- `dotnet publish` 산출물 그대로 사용
|
|
- 우클릭 → **추가 옵션 표시** → "JPEG로 빠른 변환" / "JPEG로 변환…"
|
|
- 인증서·서명 불필요
|
|
|
|
### B) MSIX 패키지 — Win11 메인 메뉴 노출 (Phase 2)
|
|
- `packaging/BuildMsix.ps1` 로 MSIX 빌드
|
|
- 자체 서명 인증서를 `LocalMachine\TrustedPeople`에 임포트 후 사이드로드
|
|
- 우클릭 → 바로 메인 메뉴에 항목 노출
|
|
- 자세한 절차는 [packaging/README.md](packaging/README.md)
|
|
|
|
## 프로젝트 구조
|
|
|
|
```
|
|
everythingToJpeg/
|
|
├── EverythingToJpeg.slnx
|
|
└── src/
|
|
├── EverythingToJpeg.Core/ — 변환 엔진, Provider 추상화
|
|
│ ├── Providers/ — IConverterProvider + Capability 메타데이터
|
|
│ ├── Converters/ — Magick / Heic / Pdf / Docx / Html / Hwpx
|
|
│ ├── ConversionEngine.cs
|
|
│ └── EverythingToJpegBootstrap.cs
|
|
└── EverythingToJpeg.App/ — WPF + CLI 통합 진입점
|
|
├── App.xaml(.cs) — CLI 라우터
|
|
├── Cli/CliRouter.cs — verb: quick / dialog / register / diagnose
|
|
├── Shell/ContextMenuRegistrar.cs — HKCU 레지스트리 등록
|
|
└── Views/ — Fluent UI 화면
|
|
```
|
|
|
|
## Provider 전략 (확장 포인트)
|
|
|
|
새 형식을 지원하려면 `IConverterProvider`를 구현하고 `EverythingToJpegBootstrap.CreateDefault()`에 등록합니다. `ProviderCapability`에 다음을 명시하세요:
|
|
|
|
- `Status` — `Available` / `Preview` / `RequiresExternal` / `ComingSoon` / `Disabled`
|
|
- `Extensions` — 자동 라우팅 + 컨텍스트 메뉴 등록 키
|
|
- `ExternalDependencies` — UI에 자동 노출되는 외부 도구
|
|
- `RoadmapNote` — 사용자에게 보여줄 향후 계획
|
|
|
|
`ComingSoon` 상태는 메인 창의 "지원 형식" 섹션에 자동 노출되지만 컨텍스트 메뉴 등록에서는 자동 제외됩니다.
|
|
|
|
## 라이선스
|
|
|
|
MIT (예정).
|