nnikif

Photojopa

Apr 18th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.46 KB | None | 0 0
  1. from tkinter import Menu
  2. import tkinter as tk
  3. from tkinter import messagebox as mBox
  4. from tkinter import filedialog
  5. from tkinter import ttk
  6. from PIL import Image, ImageTk, ImageFilter,ImageEnhance
  7.  
  8. class PhotoEdit():
  9.    
  10.  
  11.     def __init__(self):
  12.         self.win=tk.Tk()
  13.         self.win.title("Python GUI")
  14.         self.addMenu()
  15.  
  16.     def addMenu(self):
  17.         menuBar = Menu(self.win)
  18.         self.win.config(menu=menuBar)
  19.         fileMenu = Menu(menuBar)
  20.         processMenu=Menu(menuBar)
  21.         menuBar.add_cascade(label="File", menu=fileMenu)
  22.         fileMenu.add_command(label="Open",command=self._openFile)
  23.         fileMenu.add_command(label="Exit",command=self._quit)
  24.         menuBar.add_cascade(label="Process", menu=processMenu)
  25.         processMenu.add_command(label="Color",command=lambda:self._enhance_ctrl("COLOR"))
  26.         processMenu.add_command(label="Contrast",command=lambda:self._enhance_ctrl("CONTRAST"))
  27.         processMenu.add_command(label="Brigthness",command=lambda:self._enhance_ctrl("BRIGHTNESS"))
  28.         processMenu.add_command(label="Filter",command=self._preview2)     
  29.         helpMenu=Menu(menuBar)
  30.         helpMenu.add_command(label="About",command=self._msgBox)
  31.         menuBar.add_cascade(label="Help",menu=helpMenu)
  32.  
  33.     def _quit(self):
  34.         self.win.quit()
  35.         self.win.destroy()
  36.         exit() 
  37.  
  38.     def _openFile(self):
  39.         self.fileName=filedialog.askopenfilename(filetypes=[("jpeg files","*.jpg"),("png files","*.png")]) 
  40.         print(self.fileName)
  41.         self.image = Image.open(self.fileName)
  42.         self._sendImage(self.image)
  43.  
  44.     def _sendPhoto(self):
  45.         self.photo=ImageTk.PhotoImage(self.image)
  46.         self.label=tk.Label(image=self.photo)
  47.         self.label.grid(column=0, row=0,sticky=tk.NW)
  48.    
  49.     def _sendImage(self,image1):
  50.         self.photo=ImageTk.PhotoImage(image1)
  51.         self.label=tk.Label(image=self.photo)
  52.         self.label.grid(column=0, row=0,sticky=tk.NW)
  53.  
  54.  
  55.     def _blur(self):
  56.         self.image=self.image.filter(ImageFilter.BLUR)
  57.         self._sendImage(self.image)
  58.  
  59.     # def _blur_preview(self):
  60.     #   self.temp=self.image.filter(ImageFilter.BLUR)
  61.     #   self._sendImage(self.temp)
  62.  
  63.     # def _sharp_preview(self):
  64.     #   self.temp=self.image.filter(ImageFilter.SHARPEN)
  65.     #   self._sendImage(self.temp)
  66.  
  67.     def _save_changes(self):
  68.         self.image=self.temp.copy()
  69.         self.win2.destroy()
  70.  
  71.     def _cancel_changes(self):
  72.         self._sendImage(self.image)
  73. #       self.win2.quit()
  74.         self.win2.destroy()
  75.  
  76.  
  77.     def _preview2(self):
  78.         FILTER_TYPES=["BLUR","SHARPEN","DETAIL"]
  79.         self.win2=tk.Toplevel(self.win)
  80.         self.win2.title("Process Image")
  81.         self.f=tk.IntVar()
  82.         self.f.set(-10)
  83.  
  84.         for i in range(len(FILTER_TYPES)):
  85.             rad=tk.Radiobutton(self.win2,text=FILTER_TYPES[i].title(),variable=self.f,value=i,command=self._process)
  86.             rad.grid(column=0,row=i,sticky=tk.W)
  87.         buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
  88.         buttOk.grid(column=1,row=0)
  89.         buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
  90.         buttCancel.grid(column=1,row=1)
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.     def _enhance_ctrl(self,enhancerName):
  98.         self.win2=tk.Toplevel(self.win)
  99.         self.win2.title(enhancerName.title())
  100.         db=tk.DoubleVar()
  101.         if enhancerName=="BRIGHTNESS":
  102.             scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._brightness)
  103.         if enhancerName=="CONTRAST":
  104.             scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._contrast)
  105.         if enhancerName=="COLOR":
  106.             scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._color)   
  107.         scale.grid(column=0,row=0)
  108.         scale.set(1.0)
  109.         buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
  110.         buttOk.grid(column=1,row=0)
  111.         buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
  112.         buttCancel.grid(column=1,row=1)
  113.  
  114.     # def _enhance(self,factor,enhancerName):
  115.     #   factor=float(factor)
  116.     #   print(factor)
  117.     #   if enhancerName=="BRIGHTNESS":
  118.     #       enhancer=ImageEnhance.Brightness(self.image)
  119.     #   self.temp=enhancer.enhance(factor)
  120.     #   self._sendImage(self.temp)
  121.  
  122.  
  123.     def _contrast_control(self):
  124.        
  125.         self.win2=tk.Toplevel(self.win)
  126.         self.win2.title("Contrast")
  127.         db=tk.DoubleVar()
  128.        
  129.         scale=tk.Scale(self.win2,label="Contrast",from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._contrast)
  130.         scale.grid(column=0,row=0)
  131.         scale.set(1.0)
  132.         buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
  133.         buttOk.grid(column=1,row=0)
  134.         buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
  135.         buttCancel.grid(column=1,row=1)
  136.  
  137.     def _contrast(self,factor):
  138.         factor=float(factor)
  139.         print(factor)
  140.         enhancer=ImageEnhance.Contrast(self.image)
  141.         self.temp=enhancer.enhance(factor)
  142.         self._sendImage(self.temp)
  143.  
  144.     def _brightness(self,factor):
  145.         factor=float(factor)
  146.         print(factor)
  147.         enhancer=ImageEnhance.Brightness(self.image)
  148.         self.temp=enhancer.enhance(factor)
  149.         self._sendImage(self.temp)
  150.  
  151.     def _color(self,factor):
  152.         factor=float(factor)
  153.         print(factor)
  154.         enhancer=ImageEnhance.Color(self.image)
  155.         self.temp=enhancer.enhance(factor)
  156.         self._sendImage(self.temp)
  157.  
  158.  
  159.  
  160.     def _process(self):
  161.    
  162.  
  163.         if self.f.get()==0:
  164.             self.temp=self.image.filter(ImageFilter.BLUR)
  165.         if self.f.get()==1:
  166.             self.temp=self.image.filter(ImageFilter.SHARPEN)
  167.         if self.f.get()==2:
  168.             self.temp=self.image.filter(ImageFilter.DETAIL)
  169.         self._sendImage(self.temp)
  170.  
  171.  
  172.  
  173.  
  174.  
  175.     # def _preview(self):
  176.     #   self.win2=tk.Toplevel(self.win)
  177.     #   self.win2.title("Process Image")
  178.     #   rad1 = tk.Radiobutton(self.win2, text="Blur", command=self._blur_preview)
  179.     #   rad1.grid(column=0, row=0, sticky=tk.W)
  180.     #   rad2 = tk.Radiobutton(self.win2, text="Sharpen", command=self._sharp_preview)
  181.     #   rad2.grid(column=1, row=0, c)
  182.     #   buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
  183.     #   buttOk.grid(column=0,row=1)
  184.     #   buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
  185.     #   buttCancel.grid(column=1,row=1)
  186.         # number = tk.StringVar()
  187.         # numberChosen = ttk.Combobox(self.win2, width=12, textvariable=number)
  188.         # numberChosen['values'] = ("Blur", "Sharpen", 4, 42, 100)
  189.         # numberChosen.grid(column=0, row=0)
  190.         # numberChosen.current(0)
  191.     #   self.temp=self.image.copy()
  192.  
  193. #       self.temp_photo=ImageTk.PhotoImage(self.temp)
  194. #       self.label=tk.Label(self.win,image=self.temp_photo)
  195. #       self.label.grid(column=0, row=0,sticky=tk.NW)
  196.        
  197.     def _msgBox(self):
  198.         mBox.showinfo('Photojop:','A simple photoprocessing program')
  199.  
  200.  
  201.  
  202.  
  203. photoEditor=PhotoEdit()
  204. photoEditor.win.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment