Advertisement
shh_algo_PY

Eric - Easy Editor Part 2

Jun 24th, 2022
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.65 KB | None | 0 0
  1. import os
  2.  
  3. from PyQt5.QtWidgets import(QApplication, QWidget, QFileDialog, QLabel, QPushButton, QListWidget, QHBoxLayout, QVBoxLayout)
  4.  
  5. from PyQt5.QtCore import Qt
  6. from PyQt5.QtGui import QPixmap
  7. from PIL import Image
  8. from PIL import ImageFilter
  9. from PIL.ImageQt import ImageQt
  10. from PIL.ImageFilter import(BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE, EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN, GaussianBlur, UnsharpMask)
  11.  
  12. app = QApplication([])
  13. win = QWidget()
  14. win.resize(700, 500)
  15. win.setWindowTitle('Easy Editor')
  16. lb_image = QLabel("Image")
  17. btn_dir = QPushButton("Folder")
  18. lw_files = QListWidget()
  19.  
  20. btn_left = QPushButton("Left")
  21. btn_right = QPushButton("Right")
  22. btn_flip = QPushButton("Mirror")
  23. btn_sharp = QPushButton("Sharpness")
  24. btn_bw = QPushButton("B/W")
  25.  
  26. row = QHBoxLayout()
  27. col1 = QVBoxLayout()
  28. col2 = QVBoxLayout()
  29.  
  30. col1.addWidget(btn_dir)
  31. col1.addWidget(lw_files)
  32.  
  33. col2.addWidget(lb_image, 95)
  34.  
  35. row_tools = QHBoxLayout()
  36. row_tools.addWidget(btn_left)
  37. row_tools.addWidget(btn_right)
  38. row_tools.addWidget(btn_flip)
  39. row_tools.addWidget(btn_sharp)
  40. row_tools.addWidget(btn_bw)
  41. col2.addLayout(row_tools)
  42.  
  43. row.addLayout(col1, 20)
  44. row.addLayout(col2, 80)
  45. win.setLayout(row)
  46.  
  47. workdir = ''
  48.  
  49. def  filter(files, extensions):
  50.     result = []
  51.     for filename in files:
  52.         for ext in extensions:
  53.             if filename.endswith(ext):
  54.                 result.append(filename)
  55.     return result
  56.  
  57. def chooseWorkdir():
  58.     global workdir
  59.     workdir = QFileDialog.getExistingDirectory()
  60.  
  61. def showFilenameList():
  62.     extensions = ['.jpg', '.jpeg', '.png', 'gif', '.bmp']
  63.     chooseWorkdir()
  64.     filenames = filter(os.listdir(workdir), extensions)
  65.     lw_files.clear()
  66.     for filename in filenames:
  67.         lw_files.addItem(filename)
  68.  
  69. btn_dir.clicked.connect(showFilenameList)
  70.  
  71. class ImageProcessor():
  72.     def __init__(self):
  73.         self.image = None
  74.         self.dir = None
  75.         self.filename = None
  76.         self.save_dir = "Modified/" #object(current image) saved to a filecalled modified
  77.  
  78.     def loadImage(self, dir, filename):
  79.         self.dir = dir
  80.         self.filename = filename
  81.         image_path = os.path.join(dir, filename)
  82.         self.image = Image.open(image_path)
  83.  
  84.     def do_bw(self):
  85.         self.image = self.image.convert("L")
  86.         self.saveImage()
  87.         image_path = os.path.join(self.dir, self.save_dir, self.filename)
  88.         self.showImage(image_path)
  89.  
  90.     def do_left(self):
  91.         self.image = self.image.transpose(Image.ROTATE_90)
  92.         self.saveImage()
  93.         image_path = os.path.join(self.dir, self.save_dir, self.filename)
  94.         self.showImage(image_path)
  95.  
  96.     def saveImage(self):
  97.         path = os.path.join(self.dir, self.save_dir)
  98.         if not(os.path.exists(path) or os.path.isdir(path)):
  99.             os.mkdir(path)
  100.         image_path = os.path.join(path, self.filename)
  101.         self.image.save(image_path)
  102.  
  103.     def showImage(self, path):
  104.         lb_image.hide()
  105.         pixmapimage = QPixmap(path)
  106.         w, h = lb_image.width(), lb_image.height()
  107.         pixmapimage = pixmapimage.scaled(w, h, Qt.KeepAspectRatio)
  108.         lb_image.setPixmap(pixmapimage)
  109.         lb_image.show()
  110.  
  111. workimage = ImageProcessor()
  112.  
  113. def showChosenImage():
  114.     if lw_files.currentRow() >= 0:
  115.         filename = lw_files.currentItem().text()
  116.         workimage.loadImage(workdir, filename)
  117.         image_path = os.path.join(workimage.dir, workimage.filename)
  118.         workimage.showImage(image_path)
  119.    
  120. lw_files.currentRowChanged.connect(showChosenImage)
  121.  
  122. btn_bw.clicked.connect(workimage.do_bw)
  123. btn_left.clicked.connect(workimage.do_left)
  124.  
  125. win.show()
  126. app.exec()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement