This FREE Image Editor is INSANE in 2025! π₯ | Fuzzu Modern Image Editor
Demo :
Click Video πππ
Code :
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk, ImageEnhance, ImageFilter
class ImageEditorApp:
def __init__(self, root):
self.root = root
self.root.title("Fuzzu Modern Image Editor")
self.root.geometry("900x700")
self.root.configure(bg="#1e1e1e")
self.image_path = None
self.original_image = None
self.display_image = None
self.last_filter = None
self.create_widgets()
def create_widgets(self):
self.canvas = tk.Canvas(self.root, bg="#000000")
self.canvas.pack(pady=20, fill="both", expand=True)
self.btn_frame = tk.Frame(self.root, bg="#1e1e1e")
self.btn_frame.pack(pady=10)
load_btn = tk.Button(self.btn_frame, text="Load Image", command=self.load_image, bg="#444", fg="white")
load_btn.grid(row=0, column=0, padx=10)
save_btn = tk.Button(self.btn_frame, text="Save Image", command=self.save_image, bg="#444", fg="white")
save_btn.grid(row=0, column=1, padx=10)
crop_btn = tk.Button(self.btn_frame, text="Crop Image", command=self.crop_image, bg="#444", fg="white")
crop_btn.grid(row=0, column=2, padx=10)
reset_btn = tk.Button(self.btn_frame, text="Reset Image", command=self.reset_image, bg="#444", fg="white")
reset_btn.grid(row=0, column=3, padx=10)
self.filter_frame = tk.Frame(self.root, bg="#1e1e1e")
self.filter_frame.pack(pady=5)
self.add_filter_button("Blur", self.apply_blur, 0)
self.add_filter_button("Edge Enhance", self.apply_edge_enhance, 1)
def add_filter_button(self, text, command, column):
def show_slider():
if hasattr(self, 'slider') and self.slider.winfo_exists():
self.slider.destroy()
self.slider = tk.Scale(self.root, from_=0, to=100, orient="horizontal", bg="#2e2e2e", fg="white",
highlightthickness=0, troughcolor="#555", length=300, label=f"{text} Level (%)")
self.slider.set(50)
self.slider.pack(pady=10)
def apply():
value = self.slider.get()
command(value)
apply_btn = tk.Button(self.root, text=f"Apply {text}", command=apply, bg="#444", fg="white")
apply_btn.pack()
btn = tk.Button(self.filter_frame, text=text, command=show_slider, bg="#444", fg="white")
btn.grid(row=0, column=column, padx=10)
def load_image(self):
file_path = filedialog.askopenfilename()
if not file_path:
return
try:
self.image_path = file_path
self.original_image = Image.open(file_path)
self.display_image = self.original_image.copy()
self.show_image()
except Exception as e:
messagebox.showerror("Error", f"Unable to load image: {e}")
def show_image(self):
if self.display_image:
img = self.display_image.copy()
img.thumbnail((800, 500))
self.tk_image = ImageTk.PhotoImage(img)
self.canvas.delete("all")
self.canvas.create_image(self.canvas.winfo_width() // 2, self.canvas.winfo_height() // 2, image=self.tk_image, anchor="center")
def save_image(self):
if self.display_image:
file_path = filedialog.asksaveasfilename(defaultextension=".png")
if file_path:
self.display_image.save(file_path)
messagebox.showinfo("Saved", "Image saved successfully!")
def reset_image(self):
if self.original_image:
self.display_image = self.original_image.copy()
self.show_image()
def crop_image(self):
if not self.display_image:
messagebox.showerror("Error", "No image loaded.")
return
crop_window = tk.Toplevel(self.root)
crop_window.title("Crop Image - Fuzzu Crop Tool")
crop_window.geometry("600x600")
crop_window.config(bg="#1e1e1e")
canvas = tk.Canvas(crop_window, bg="black", cursor="cross")
canvas.pack(fill="both", expand=True)
img = self.display_image.copy()
img.thumbnail((600, 600))
img_tk = ImageTk.PhotoImage(img)
canvas.image = img_tk
canvas.create_image(0, 0, anchor="nw", image=img_tk)
self.crop_start = None
self.crop_rect = None
def on_mouse_down(event):
self.crop_start = (event.x, event.y)
if self.crop_rect:
canvas.delete(self.crop_rect)
self.crop_rect = canvas.create_rectangle(event.x, event.y, event.x, event.y, outline="red", width=2)
def on_mouse_drag(event):
if self.crop_start:
canvas.coords(self.crop_rect, self.crop_start[0], self.crop_start[1], event.x, event.y)
def crop_and_apply():
if not self.crop_rect:
messagebox.showwarning("Warning", "No crop area selected.")
return
x1, y1, x2, y2 = canvas.coords(self.crop_rect)
scale_x = self.display_image.width / img.width
scale_y = self.display_image.height / img.height
left = int(min(x1, x2) * scale_x)
upper = int(min(y1, y2) * scale_y)
right = int(max(x1, x2) * scale_x)
lower = int(max(y1, y2) * scale_y)
try:
self.display_image = self.display_image.crop((left, upper, right, lower))
self.last_filter = None
self.show_image()
crop_window.destroy()
except Exception as e:
messagebox.showerror("Error", f"Invalid crop area: {e}")
canvas.bind("<Button-1>", on_mouse_down)
canvas.bind("<B1-Motion>", on_mouse_drag)
crop_btn = tk.Button(crop_window, text="Crop", command=crop_and_apply, bg="#4b4b4b", fg="white")
crop_btn.pack(pady=10)
def apply_blur(self, level):
if level == 0:
self.display_image = self.original_image.copy()
else:
radius = level / 10
self.display_image = self.original_image.copy().filter(ImageFilter.GaussianBlur(radius))
self.show_image()
def apply_edge_enhance(self, level):
if level == 0:
self.display_image = self.original_image.copy()
else:
self.display_image = self.original_image.copy()
for _ in range(level // 25):
self.display_image = self.display_image.filter(ImageFilter.EDGE_ENHANCE)
self.show_image()
if __name__ == "__main__":
root = tk.Tk()
app = ImageEditorApp(root)
root.mainloop()
Comments
Post a Comment