Vintage appMaker의 Tech Blog

[이미지 변환] jpg로 압축변환 본문

Source code or Tip/python

[이미지 변환] jpg로 압축변환

VintageappMaker 2026. 6. 11. 23:18

이미지 자동 변환 스크립트 개발자 매뉴얼

본 문서는 지정된 디렉토리 내에 추가되는 이미지 파일(PNG, BMP, TIFF 등)을 실시간으로 감지하여 품질 80%의 JPG 파일로 자동 변환하는 watchdog_jpgconvt.py 스크립트의 사용 및 운용 가이드입니다.


1. 목적

  • 실시간 이미지 포맷 최적화: 로컬 폴더에 새로 생성되거나 복사되는 PNG, BMP, TIFF 파일들을 감지하여 JPEG로 변환하고 웹 친화적인 용량(품질 80%)으로 압축하여 저장 공간을 효율화합니다.
  • 사용자 맞춤 경로 지원: 명령줄 매개변수(Argument)로 감시할 디렉토리 경로를 직접 전달받거나, 누락된 경우 입력을 받아 유동적인 작업 폴더 모니터링을 가능케 합니다.

2. 소스코드 전체

watchdog_jpgconvt.py의 전체 소스코드는 다음과 같습니다.

import sys
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from PIL import Image
import os

class ImageAutoConverterHandler(FileSystemEventHandler):
    def on_created(self, event):
        # png, bmp, tiff 파일을 타겟으로 지정
        if not event.is_directory and event.src_path.lower().endswith(('.png', '.bmp', '.tiff')):
            time.sleep(1) # 파일 쓰기 완료 임시 대기
            try:
                dest_path = os.path.splitext(event.src_path)[0] + '.jpg'
                with Image.open(event.src_path) as im:
                    im.convert("RGB").save(dest_path, "JPEG", quality=80)
                print(f"Auto-converted: {event.src_path} -> {dest_path}")
            except Exception as e:
                print(f"Conversion failed for {event.src_path}: {e}")

if __name__ == "__main__":
    # 실행 시 실행 인자(Argument)로 감시할 폴더를 지정받고, 없으면 직접 입력받음
    if len(sys.argv) > 1:
        path = sys.argv[1]
    else:
        path = input("감시할 폴더 경로를 입력하세요: ").strip()

    # 경로 유효성 검사
    if not os.path.isdir(path):
        print(f"오류: '{path}'는 올바른 디렉토리 경로가 아닙니다.")
        sys.exit(1)

    event_handler = ImageAutoConverterHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    print(f"Monitoring started for folder: {path}")
    print("종료하려면 Ctrl+C를 누르세요.")
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

3. 패키지 설치 및 실행

패키지 설치

스크립트 실행에 필요한 라이브러리(watchdog, Pillow)를 설치합니다.

pip install watchdog Pillow

실행 방법

방법 A: 실행 시 감시 폴더를 인자로 전달 (권장)

python watchdog_jpgconvt.py "C:\Users\user\Downloads"

방법 B: 대화형 입력으로 폴더 지정

인자 없이 스크립트를 실행한 후 나타나는 프롬프트에 경로를 입력합니다.

python watchdog_jpgconvt.py
# 출력: 감시할 폴더 경로를 입력하세요: 

4. 백그라운드에서 실행 및 종료 방법

Windows 백그라운드 실행 (PowerShell)

콘솔 창을 띄우지 않고 백그라운드 프로세스로 동작하게 하려면 Start-Process 명령어를 사용합니다.

Start-Process python -ArgumentList "C:\Users\user\Downloads\watchdog_jpgconvt.py C:\Users\user\Downloads" -WindowStyle Hidden

백그라운드 프로세스 종료 방법 (PowerShell)

실행 중인 백그라운드 스크립트를 찾아 강제 종료합니다.

# 실행 중인 watchdog_jpgconvt.py 프로세스 식별 및 종료
Get-WmiObject Win32_Process -Filter "name='python.exe'" | Where-Object { $_.CommandLine -like "*watchdog_jpgconvt.py*" } | ForEach-Object { Stop-Process $_.ProcessId -Force }
Comments