# ImageSizeChanger

## 프로그램 소개

ImageSizeChanger는 이미지 해상도, 화질, 출력 형식을 변경하는 Windows 데스크톱 프로그램입니다. 모든 결과는 새 파일로 저장하며 원본 파일은 절대 수정하지 않습니다.

## 주요 기능

- 입력 형식: JPG, JPEG, PNG, WEBP
- 입력 방법: 파일 선택, 여러 파일 선택, 폴더 선택, 하위 폴더 포함
- 출력 형식: WEBP, JPG, PNG, 원본 형식 유지
- 해상도: FHD, HD, 사용자 지정, 긴 변 기준
- 화질: 프리셋 또는 1~100 사용자 지정
- 원본·변환 결과 Preview 및 예상 출력 용량 표시
- Queue 기반 비동기 Batch 변환
- 진행률, 성공·실패·건너뜀 상태, 취소
- 설정 저장 및 복구
- UTF-8 작업 로그
- partial 파일을 이용한 안전 저장
- 원본 파일 보호

## 사용 방법

1. **파일 추가**: `파일 추가` 또는 `폴더 추가`로 변환할 이미지를 목록에 넣습니다. 필요한 경우 `하위 폴더 포함`을 선택합니다.
2. **설정**: 해상도, 화질, 출력 형식과 출력 폴더를 지정합니다.
3. **Preview**: 목록에서 파일을 선택해 원본과 메모리 변환 결과를 확인합니다. Preview는 파일을 저장하지 않습니다.
4. **변환 시작**: `변환 시작`을 누릅니다. 작업 중에는 진행률과 파일별 상태가 갱신됩니다.
5. **완료**: 성공·실패·건너뜀 수를 확인하고 출력 폴더와 로그를 검토합니다.

## 출력 폴더

- **converted**: 각 원본 파일 폴더 안의 `converted` 폴더에 저장합니다.
- **직접 출력**: 사용자가 지정한 출력 폴더에 저장합니다.
- **원본 구조 유지**: 직접 출력 폴더를 사용할 때 입력 파일의 상대 하위 폴더 구조를 유지할 수 있습니다.
- 같은 출력 파일명이 이미 있으면 `_1`, `_2` 번호를 추가하여 덮어쓰지 않습니다.

## 화질 프리셋

- 낮음 75
- 보통 80
- 권장 85
- 높음 90
- 최고 95
- 사용자 지정 1~100

PNG는 무손실 형식이므로 화질 값이 적용되지 않습니다.

## 원본 보호 정책

원본 파일은 절대 삭제, 수정, 이동하지 않습니다. 변환 결과는 별도 경로에 partial 파일로 먼저 저장하고 검증된 파일만 최종 이름으로 교체합니다. 오류나 취소가 발생하면 partial 파일을 제거합니다.

## 로그 위치

- 개발 실행: `workspace\logs\imagesizechanger.log`
- EXE 실행: `%APPDATA%\ImageSizeChanger\logs\imagesizechanger.log`
- APPDATA를 사용할 수 없는 환경: 사용자 홈의 `.ImageSizeChanger\logs`

## 실행 방법

```powershell
python run.py
```

또는 `run_app.bat`가 있는 배포 환경에서는 해당 배치 파일을 사용할 수 있습니다.

## EXE

빌드 결과는 `dist\ImageSizeChanger.exe`입니다. 사용자 배포 파일은 `release\ImageSizeChanger-v1.0.0.zip`입니다.

## 알려진 제한

- 현재 입력 형식은 JPG/JPEG, PNG, WEBP입니다.
- BMP와 TIFF는 지원하지 않으며 향후 개선 후보입니다.
- 애니메이션 WEBP는 첫 프레임만 처리합니다.
- EXE는 코드 서명되지 않아 Windows SmartScreen 경고가 나타날 수 있습니다.
