65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
import tkinter as tk
|
|
from tkinter import messagebox
|
|
from typing import Callable
|
|
import sys
|
|
import os
|
|
|
|
# Add parent directory to path for imports (since we're in utils/ subdirectory)
|
|
_parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
if _parent_dir not in sys.path:
|
|
sys.path.insert(0, _parent_dir)
|
|
|
|
|
|
class ImagePropertiesHandler:
|
|
"""Handler for displaying image properties.
|
|
|
|
This class encapsulates the functionality to display image information
|
|
such as dimensions, mode, format, file size, and path.
|
|
"""
|
|
|
|
def __init__(self, get_current_image: Callable):
|
|
"""Initialize the image properties handler.
|
|
|
|
Args:
|
|
get_current_image: Callable that returns the current ImageContainer
|
|
"""
|
|
self._get_current_image = get_current_image
|
|
|
|
def show_properties(self) -> None:
|
|
"""Display image properties in a dialog."""
|
|
current_image = self._get_current_image()
|
|
if current_image is None or current_image.getImage() is None:
|
|
messagebox.showwarning("No Image", "No image loaded.")
|
|
return
|
|
|
|
image = current_image.getImage()
|
|
width, height = current_image.getDimensions()
|
|
path = current_image.getPath()
|
|
mode = image.mode if image else "N/A"
|
|
format_name = image.format if image else "N/A"
|
|
|
|
# Get file size if path exists
|
|
file_size = "N/A"
|
|
if path:
|
|
try:
|
|
size_bytes = os.path.getsize(path)
|
|
if size_bytes < 1024:
|
|
file_size = f"{size_bytes} bytes"
|
|
elif size_bytes < 1024 * 1024:
|
|
file_size = f"{size_bytes / 1024:.2f} KB"
|
|
else:
|
|
file_size = f"{size_bytes / (1024 * 1024):.2f} MB"
|
|
except:
|
|
file_size = "Unknown"
|
|
|
|
# Create properties message
|
|
properties_text = f"Image Properties\n\n"
|
|
properties_text += f"Dimensions: {width} x {height} pixels\n"
|
|
properties_text += f"Mode: {mode}\n"
|
|
properties_text += f"Format: {format_name}\n"
|
|
properties_text += f"File Size: {file_size}\n"
|
|
properties_text += f"Path: {path if path else 'Unsaved'}"
|
|
|
|
messagebox.showinfo("Image Properties", properties_text)
|
|
|