[python] PySimpleGUI를 사용하여 사진 편집 도구 만들기

PySimpleGUI는 파이썬에서 간단한 사용자 인터페이스(GUI)를 만들 수 있는 라이브러리입니다. 이 블로그 포스트에서는 PySimpleGUI를 사용하여 사진 편집 도구를 만드는 방법을 알아보겠습니다.

필요한 패키지 설치

우리는 먼저 PySimpleGUI를 설치해야 합니다. 다음 명령어를 사용하여 패키지를 설치합니다.

pip install PySimpleGUI

또한, 이미지 편집을 위해 OpenCV 패키지도 설치해야 합니다. 아래 명령어를 사용하여 설치할 수 있습니다.

pip install opencv-python

GUI 인터페이스 생성하기

PySimpleGUI를 사용하여 GUI 인터페이스를 만들기 위해 우리는 먼저 필요한 모듈을 가져와야 합니다. 다음과 같이 코드를 작성합니다.

import PySimpleGUI as sg

layout = [
    [sg.Text('사진 편집 도구')],
    [sg.Image(key='-IMAGE-')],
    [sg.Button('이미지 불러오기'), sg.Button('흑백 처리'), sg.Button('저장'), sg.Button('종료')]
]

window = sg.Window('사진 편집 도구', layout)

while True:
    event, values = window.read()
    
    if event == sg.WINDOW_CLOSED or event == '종료':
        break
    
    elif event == '이미지 불러오기':
        # 이미지 선택 코드 작성
    
    elif event == '흑백 처리':
        # 흑백 처리 코드 작성
    
    elif event == '저장':
        # 이미지 저장 코드 작성

window.close()

위 코드에서는 PySimpleGUI의 Text, Image, Button 위젯을 사용하여 GUI 인터페이스를 구성하였습니다. 이미지를 불러오기, 흑백 처리, 저장 등의 기능을 처리하기 위해 각 버튼에 이벤트를 설정합니다.

이미지 불러오기 기능 추가하기

이미지를 불러오는 기능을 추가하기 위해 이미지 불러오기 버튼의 이벤트를 처리해야 합니다. 다음과 같이 코드를 작성하여 이미지 파일을 선택하고 화면에 표시합니다.

elif event == '이미지 불러오기':
    filename = sg.popup_get_file('이미지 파일 선택', file_types=(("Image Files", "*.png;*.jpg;*.jpeg"),))
    if filename:
        image = cv2.imread(filename)
        image = cv2.resize(image, (400, 400)) # 이미지 크기 조절
        window['-IMAGE-'].update(data=cv2.imencode('.png', image)[1].tobytes())

위 코드에서 sg.popup_get_file을 사용하여 파일 선택 대화 상자를 열고 선택된 이미지 파일의 경로를 가져옵니다. 선택된 이미지를 cv2.imread를 사용하여 읽은 후, 크기를 조절합니다. 마지막으로, window['-IMAGE-'].update를 사용하여 화면에 이미지를 업데이트합니다.

흑백 처리 기능 추가하기

흑백 처리 기능을 추가하기 위해 흑백 처리 버튼의 이벤트를 처리해야 합니다. 다음과 같이 코드를 작성하여 이미지를 흑백으로 변환합니다.

elif event == '흑백 처리':
    if 'image' in locals():
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        window['-IMAGE-'].update(data=cv2.imencode('.png', gray_image)[1].tobytes())
    else:
        sg.Popup('이미지를 먼저 불러와주세요.')

위 코드에서 cv2.cvtColor를 사용하여 이미지를 흑백으로 변환합니다. 변환된 흑백 이미지를 화면에 업데이트합니다. 이미지를 불러오지 않은 경우, sg.Popup을 사용하여 알림을 표시합니다.

이미지 저장 기능 추가하기

이미지를 저장하는 기능을 추가하기 위해 저장 버튼의 이벤트를 처리해야 합니다. 다음과 같이 코드를 작성하여 흑백 처리된 이미지를 저장합니다.

elif event == '저장':
    if 'gray_image' in locals():
        save_filename = sg.popup_get_file('이미지 저장', save_as=True, file_types=(("Image Files", "*.png"),))
        if save_filename:
            cv2.imwrite(save_filename, gray_image)
            sg.popup('이미지가 저장되었습니다.')
    else:
        sg.Popup('이미지를 흑백으로 처리한 후 저장해주세요.')

위 코드에서 sg.popup_get_file을 사용하여 저장할 이미지 파일의 경로를 설정합니다. 흑백 처리된 이미지를 cv2.imwrite를 사용하여 저장합니다. 이미지를 흑백으로 처리하지 않은 경우, sg.Popup을 사용하여 알림을 표시합니다.

마무리

이제 위에서 작성한 코드를 실행하면 사진 편집 도구가 나타납니다. 이미지를 불러오고, 흑백 처리하며, 저장할 수 있습니다. PySimpleGUI를 사용하여 간단하게 GUI를 구성하고, OpenCV를 통해 이미지를 처리하는 방법을 알아보았습니다.

참고 자료: