Python과 TKinter를 사용한 그림 응용 프로그램
내가 프로젝트를 시작한 방법에 대한 설명이 있습니다.
프로젝트에서 나는 main.py의 모든 코드를 넣는 pillow_essaies.py 파일을 만듭니다.
main.py에서 프로젝트를 시작합니다.
import tkinter as tk
from tkinter import *
window = Tk()
window.title("Pictures transformer")
window.geometry("900x500+100+100")
window.configure(bg="#e2f9b8")
window.mainloop()
아이콘도 추가합니다. 이를 위해 Pillow를 가져와야 합니다.
from PIL import Image, ImageTk
아이콘을 만듭니다.
# icon
image_icon=ImageTk.PhotoImage(file="images/tulips.jpeg")
window.iconphoto(False, image_icon)
하나의 아이콘이 추가되었습니다. 이제 인터페이스에 이미지를 추가합니다. ImageTk.PhotoImage 에는 resize 메서드가 없기 때문에 순서가 매우 중요합니다.
# logo
image = Image.open("./images/tulips.jpeg")
img1 = image.resize((70, 100), Image.ANTIALIAS)
logo = ImageTk.PhotoImage(img1)
Label(image=logo, bg="#fff").place(x=10, y=10)
텍스트도 추가합니다.
Label(text="Pictures transformer", font="arial 30 bold", fg="#313715", bg="#e2f9b8").place(x=90, y=50)
이제 이미지를 가져올 공간을 만듭니다.
# selected image
selectimage = Frame(width=400, height=400, bg="#d6dee5")
selectimage.place(x=10, y=120)
f = Frame(selectimage, bg="black", width=380, height=320)
f.place(x=10, y=10)
lbl = Label(f, bg="black)
lbl.place(x=0, y=0)
이제 컴퓨터에서 이미지를 가져와야 합니다. 이를 위해 버튼을 만듭니다.
Button(selectimage, text="Select image", width=12, height=2, font="arial 14 bold", command=showimage).place(x=10, y=340)
함수 showimage를 작성해야 합니다. 이를 위해 os 및 filedialog를 가져옵니다.
from tkinter import filedialog
import os
def showimage():
filename=filedialog.askopenfilename(initialdir=os.getcwd(),
title="Select image file", filetypes=(("PNG file", "*.png"),
("JPG file", "*.jpg"),
("JPEG file", "*.jpeg"),
("ALL file", "*.txt")))
importedimage = Image.open(filename)
importedimage = ImageTk.PhotoImage(importedimage)
lbl.configure(image=importedimage, width=380, height=320)
lbl.image=importedimage
여기에 몇 가지 필터를 추가하겠습니다. 버튼으로 시작합니다.
# transformation section
transformationsection = Frame(width=440, height=510, bg="#939f5c")
transformationsection.place(x=450, y=10)
Label(transformationsection, text="Filters:", font="arial 20 bold", fg="#fff", bg="#939f5c").place(x=10, y=10)
Button(transformationsection, text="BLUR", width=12, height=2, font="arial 14 bold", command=blurimage).place(x=10,
y=50)
Button(transformationsection, text="CONTOUR", width=12, height=2, font="arial 14 bold", command=conturimage).place(x=155, y=50)
Button(transformationsection, text="EMBOSS", width=12, height=2, font="arial 14 bold", command=embossimage).place(x=300, y=50)
여기에 몇 가지 기능을 만듭니다.
def blurimage():
image1 = Image.open(filename)
bluredimage = image1.filter(ImageFilter.BLUR)
bluredimage = ImageTk.PhotoImage(bluredimage)
lbl.configure(image=bluredimage, width=380, height=320)
lbl.image = bluredimage
그러나 filename이 아직 전역 변수가 아니고 PIL에서 아직 ImageFilter를 가져오지 않았기 때문에 이와 같은 함수는 작동하지 않습니다. 그래서 다음과 같이 합니다.
from PIL import ImageFilter
그리고 glonal과 같은 함수 showimage 파일 이름에서 정의합니다.
global filename
filename = filedialog.askopenfilename(initialdir=os.getcwd(),
title="Select image file", filetypes=(("PNG file", "*.png"),
("JPG file", "*.jpg"),
("JPEG file", "*.jpeg"),
("ALL file", "*.txt")))
이제 작동합니다.
다른 기능은 매우 쉽게 생성할 수 있습니다.
def conturimage():
image2 = Image.open(filename)
conturedimage = image2.filter(ImageFilter.CONTOUR)
conturedimage = ImageTk.PhotoImage(conturedimage)
lbl.configure(image=conturedimage, width=380, height=320)
lbl.image = conturedimage
def embossimage():
image3 = Image.open(filename)
embossedimage = image3.filter(ImageFilter.EMBOSS)
embossedimage = ImageTk.PhotoImage(embossedimage)
lbl.configure(image=embossedimage, width=380, height=320)
lbl.image = embossedimage
필터 컨투어
필터 엠보스
좋습니다. 하지만 모든 변경 사항을 억제하려면 어떻게 해야 합니까?
따라서 선택한 이미지 섹션에서 다시 시작하는 버튼을 만듭니다.
Button(selectimage, text="Restart", width=12, height=2, font="arial 14 bold", command=restartimage).place(x=260, y=340)
그리고 그 기능은 다음과 같습니다.
def restartimage():
restartedimage = Image.open(filename)
restartedimage = ImageTk.PhotoImage(restartedimage)
lbl.configure(image=restartedimage, width=380, height=320)
lbl.image = restartedimage
그러나 더 많은 효능이 그 기능이 될 것입니다.
def restartimage():
lbl.configure(image=importedimage, width=380, height=320)
lbl.image = importedimage
이제 사진을 회전하여 슬라이더를 만들고 싶습니다.
# rotate section
Label(transformationsection, text="Rotate image:", font="arial 20 bold", fg="#fff", bg="#939f5c").place(x=10, y=100)
rotateimage = Scale(transformationsection, from_=0, to=360, orient=HORIZONTAL, bg="#313715", length=420)
rotateimage.place(x=10, y=140)
그리고 그것과 함께 가는 기능:
def rotate(var):
image4 = Image.open(filename)
rotatedimage = image4.rotate(rotateimage.get())
rotatedimage = ImageTk.PhotoImage(rotatedimage)
lbl.configure(image=rotatedimage, width=380, height=320)
lbl.image = rotatedimage
이제 몇 가지 색상을 변경하고 싶기 때문에 각 색상에 대한 세로 슬라이더를 만듭니다.
# color change
Label(transformationsection, text="Color change:", font="arial 20 bold", fg="#fff", bg="#939f5c").place(x=10, y=190)
redimage = Scale(transformationsection, from_=0, to=255, orient=VERTICAL, bg="#313715", length=180, command=changered)
redimage.place(x=40, y=230)
Label(transformationsection, text="RED", font="arial 12 bold", fg="#fff", bg="#939f5c").place(x=40, y=420)
greenimage = Scale(transformationsection, from_=0, to=255, orient=VERTICAL, bg="#313715", length=180, command=changegreen)
greenimage.place(x=200, y=230)
Label(transformationsection, text="GREEN", font="arial 12 bold", fg="#fff", bg="#939f5c").place(x=200, y=420)
blueimage = Scale(transformationsection, from_=0, to=255, orient=VERTICAL, bg="#313715", length=180, command=changeblue)
blueimage.place(x=350, y=230)
Label(transformationsection, text="BLUE", font="arial 12 bold", fg="#fff", bg="#939f5c").place(x=350, y=420)
그리고 색상을 변경하는 몇 가지 기능을 만듭니다.
def changered(var):
image5 = Image.open(filename)
r, g, b = image5.split()
r = r.point(lambda i: redimage.get())
coloredimage = Image.merge("RGB", (r, g, b))
coloredimage.getextrema()
coloredimage = ImageTk.PhotoImage(coloredimage)
lbl.configure(image=coloredimage, width=380, height=320)
lbl.image = coloredimage
def changeblue(var):
image5 = Image.open(filename)
r, g, b = image5.split()
b = b.point(lambda i: blueimage.get())
coloredimage = Image.merge("RGB", (r, g, b))
coloredimage.getextrema()
coloredimage = ImageTk.PhotoImage(coloredimage)
lbl.configure(image=coloredimage, width=380, height=320)
lbl.image = coloredimage
def changegreen(var):
image5 = Image.open(filename)
r, g, b = image5.split()
g = g.point(lambda i: greenimage.get())
coloredimage = Image.merge("RGB", (r, g, b))
coloredimage.getextrema()
coloredimage = ImageTk.PhotoImage(coloredimage)
lbl.configure(image=coloredimage, width=380, height=320)
lbl.image = coloredimage
Voilà 결과:
이 작은 애플리케이션의 모든 코드를 찾을 수 있습니다here.
이것은 Pillow와 Tkinter를 사용하는 방법의 예입니다.
주말 잘 보내시고 푹 쉬세요.
Reference
이 문제에 관하여(Python과 TKinter를 사용한 그림 응용 프로그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deotyma/the-picture-application-with-python-and-tkinter-3hf6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)