Files
IKT213-photo-app/src/utils/image_properties.py

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)