Add CropImage child of ImageManipulation

This commit is contained in:
Kim André Bjørkede
2025-10-11 20:48:28 +02:00
parent 3024756b9c
commit 8f1ae488eb
6 changed files with 52 additions and 48 deletions

View File

@@ -6,7 +6,7 @@ pillow
numpy numpy
## run ## run
python main.py python src/Main.py
## menu items ## menu items
* file * file

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
pillow~=11.3.0
numpy~=2.3.1

View File

@@ -2,6 +2,7 @@ import tkinter as tk
from tkinter import filedialog from tkinter import filedialog
from PIL import ImageTk from PIL import ImageTk
from ImageContainer import ImageContainer from ImageContainer import ImageContainer
from ImageManipulation.ManipulationList import *
class GUI: class GUI:
@@ -47,54 +48,11 @@ class GUI:
file_menu.add_command(label="Save Image", command=lambda: _save_image(OPENED_IMAGE)) file_menu.add_command(label="Save Image", command=lambda: _save_image(OPENED_IMAGE))
file_menu.add_command(label="Exit", command=root.quit) file_menu.add_command(label="Exit", command=root.quit)
test_menu = tk.Menu(menu, tearoff=0) test_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Test", menu=test_menu) menu.add_cascade(label="Filters", menu=test_menu)
test_menu.add_command(label="Padding", command=lambda: padding(OPENED_IMAGE, for manipulation in GetImageManipulationList():
border_width=50) if OPENED_IMAGE is not None else print( test_menu.add_command(label=manipulation.getManipulationName(), command=lambda: manipulation.manipulateImage())
"No image opened."))
test_menu.add_command(label="Crop", command=lambda: crop(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Resize",
command=lambda: resize(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Copy", command=lambda: copy(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Greyscale",
command=lambda: grayscale(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Hsv", command=lambda: hsv(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Hue Shifted",
command=lambda: hue_shifted(OPENED_IMAGE, hue=50) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Smoothed",
command=lambda: smoothing(OPENED_IMAGE) if OPENED_IMAGE is not None else print(
"No image opened."))
test_menu.add_command(label="Rotated", command=lambda: rotation(OPENED_IMAGE,
rotation_angle=90) if OPENED_IMAGE is not None else print(
"No image opened."))
clipboard_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Clipboard", menu=clipboard_menu)
image_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Image", menu=image_menu)
tools_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Tools", menu=tools_menu)
shapes_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Shapes", menu=shapes_menu)
colors_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Colors", menu=colors_menu)
layer_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Layer", menu=layer_menu)
filter_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Filter", menu=filter_menu)
#
# Frame to hold image # Frame to hold image
imgframe = tk.Frame(root, width=500, height=500, bg="lightgray", relief="sunken", bd=2) imgframe = tk.Frame(root, width=500, height=500, bg="lightgray", relief="sunken", bd=2)

View File

@@ -0,0 +1,39 @@
from .ImageManipulation import ImageManipulation
from ..ImageContainer import ImageContainer
from typing import Any, List
class CropImage(ImageManipulation):
"""Concrete implementation for cropping images."""
def __init__(self):
# You can initialize any instance variables here
self.manipulation_name = "Crop"
def manipulateImage(self, image: ImageContainer, parameters: Any) -> None:
"""
Manipulate the given image using the provided parameters.
Args:
image: The image to manipulate
parameters: Parameters for the manipulation (e.g., crop coordinates)
"""
pass
def getParameters(self) -> List[str]:
"""
Get the list of parameters required for cropping.
Returns:
List of parameter names
"""
return ["width", "height"]
def getManipulationName(self) -> str:
"""
Get the name of this manipulation operation.
Returns:
The name of the manipulation
"""
return "Crop Image"

View File

@@ -0,0 +1,4 @@
from src.ImageManipulation.CropImage import *
def GetImageManipulationList() -> list:
return [CropImage()]

View File

@@ -1,3 +1,4 @@
#!/usr/bin/python
from GUI import GUI from GUI import GUI
if __name__ == "__main__": if __name__ == "__main__":