ก่อนที่จะประมวลผลรูป น่าจะเป็นการดีที่เราแยกหน้าที่เหล่านี้ออกจากกันโดยใช้ method ใหม่แทน นั่นคือ เราจะแยกเป็น 3 method
1. constructor ทำหน้าที่รับหน้าต่างหลักมา แล้วกำหนด title ของหน้าต่าง
2. loadImage ทำหน้าที่อ่านไฟล์รูปมาเก็บไว้ในตัวแปรของคลาส
3. showImage ทำหน้าที่แสดงผลรูปในหน้าต่าง
เพื่อที่จะให้ตัวแปรใช้ร่วมกันในแต่ละ method ได้ ใน python จึงต้องสร้างให้เป็นตัวแปรของคลาส คือ มีคำว่า self นำหน้า
โค้ดที่ปรับปรุงใหม่ แต่ให้ผลลัพธ์เหมือนบทความที่แล้วก็จะเป็นดังนี้
from Tkinter import Tk, Label from PIL import Image, ImageTk class mainApp: #constructor def __init__(self,mainwindow): #assign class variable to input parameter self.mainwindow = mainwindow #set title self.mainwindow.title("Image Label") def loadImage(self): #load image self.im = Image.open("lena.jpg") def showImage(self): #convert image to Tk format self.imTk = ImageTk.PhotoImage(self.im) #create a label on main window with image lbl = Label(self.mainwindow, image=self.imTk) #pack window to label and display lbl.pack() #---Main app starts here--- root = Tk() app = mainApp(root) #load image app.loadImage() #show image app.showImage() root.mainloop()
สังเกตว่าคราวนี้เราอ่านรูปและแสดงผลด้วย method ใหม่ ซึ่งถูกเรียกใช้งานผ่าน object
ต่อไปเราจะลองเขียน method เพื่อประมวลผลรูป เช่น เปลี่ยนรูปสี ให้เป็นรูปสีเทา
หมายเหตุ ใน PIL รูปสีปกติจะเรียกว่า RGB และรูปสีเทาจะเรียกว่า L
โค้ดของโปรแกรมก็จะเพิ่ม method ใหม่สั้นๆแค่
#----------------------------------------------
#method to convert image to grayscale
def imgGray(self):
self.im = self.im.convert("L")
self.showImage()
#----------------------------------------------
ถ้าเป็นโค้ดเต็มๆ ก็ตามนี้ครับ
from Tkinter import Tk, Label from PIL import Image, ImageTk class mainApp: #constructor def __init__(self,mainwindow): #assign class variable to input parameter self.mainwindow = mainwindow #set title self.mainwindow.title("Image Label") def loadImage(self): #load image self.im = Image.open("lena.jpg") def showImage(self): #convert image to Tk format self.imTk = ImageTk.PhotoImage(self.im) #create a label on main window with image lbl = Label(self.mainwindow, image=self.imTk) #pack window to label and display lbl.pack() #method to convert image to grayscale def imgGray(self): self.im = self.im.convert("L") self.showImage() #---Main app starts here--- root = Tk() app = mainApp(root) #load image app.loadImage() #convert to grayscale image app.imgGray() root.mainloop()
No comments:
Post a Comment