오늘 다뤄볼 내용.

이미지에 워터마킹, 텍스트 추가할 수 있는 프로그램

먼저 인터페이스를 구축할 tkinter와 이미지 처리를 도와주는 PIL을 임포트합니다.

from tkinter import Tk, Button, Canvas, Image, filedialog, Text
from PIL import ImageTk, Image, ImageDraw

tkinter의 창을 생성합니다.

# 창 생성window = Tk()
window.title("이미지 워터마킹")# 창 제목window.config(pady=20, padx=20)# 창 크기

메인 이미지를 업로드하고 표시할 창을 생성합니다.

PIL을 이용하여 이미지를 불러들입니다.

# 메인 이미지# 이미지 창
main_img_canvas = Canvas(width=450, height=450)# 이미지 생성(넓이, 높이)
default_img = ImageTk.PhotoImage(Image.open('none.png'))# 기본 이미지
old_img = main_img_canvas.create_image(225,225,image=default_img)# 기본 이미지 넣기
main_img_canvas.grid(column=0, row=0, columnspan=2)# 그리드 옵션# 이미지 추가 버튼
img_button = Button(text="이미지 업로드", command=upload)# 버튼 생성
img_button.grid(column=2, row=0)# 그리드 옵션

버튼과 연계되는 upload함수입니다.

함수 바깥 부분에 NEW, NEW_IMG를 global로 불러들여와 함수 내부에서 이미지를 기억하도록 합니다.

NEW, NEW_IMG는 텍스트 추가와 워터마킹에서도 쓰이기 때문에 전역함수로 지정합니다.

filedialog.askopenfilename()으로 파일을 선택하여 업로드 할 수 있도록 합니다.

file_path는 위에서 불러들여온 파일경로에 C:이 포함되어있을 경우 업로드가 되지 않기 때문에 replace()로 삭제해줍니다.

PIL에서 ImageTK.PhotoImage()로 선택한 이미지를 불러들입니다.

canvas.itemconfig(예전 이미지, 새로운 이미지)를 활용하여 대체할 수 있도록 합니다.

def upload():
    """img_button 클릭 시 파일 업로드하는 함수"""
    global NEW_IMG# 전역함수로 이미지 기억global NEW
# 파일 경로 가져오기
    file = filedialog.askopenfilename(initialdir='path', title='select file', filetypes=(('jpg files', '*.jpg'), ('all files', '*.*')))
    file_path = file.replace("C:","")

# 파일 불러오기
    NEW = Image.open(file_path)
    NEW_IMG = ImageTk.PhotoImage(NEW)

# 이미지 생성
    main_img_canvas.itemconfig(old_img, image=NEW_IMG)

텍스트 워터마킹 기능을 추가하기 위해 tkinter에서 텍스트박스와 추가 버튼을 생성합니다.

# 텍스트# 텍스트박스 생성text = Text(window, height=5) # 텍스트 박스 생성
text.grid(column=0, row=1,columnspan=1) # 그리드
# 텍스트 추가 버튼text_button = Button(text="텍스트 추가", command=text_editor) # 추가하기 버튼 생성
text_button.grid(column=2, row=1) # 그리드 옵션

위 텍스트 버튼에서 활용되는 text_editor함수입니다