Программа для изменения разрешения изображения

В этом примере мы создадим графический интерфейс на Python с помощью библиотеки tkinter, который позволит пользователю загрузить изображение и изменить его разрешение. Мы будем использовать библиотеку Pillow (PIL) для обработки изображений.

Необходимые библиотеки

  • tkinter: стандартная библиотека Python для создания графических интерфейсов.
  • Pillow (PIL): библиотека для обработки изображений. Можно установить с помощью команды: pip install Pillow.
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk

def change_resolution():
    """Функция для изменения разрешения изображения."""
    global loaded_image, img_label

    new_width = int(width_entry.get())
    new_height = int(height_entry.get())
    
    if new_width > 0 and new_height > 0:
        if keep_aspect_var.get():
            # Сохранение пропорций
            aspect_ratio = loaded_image.width / loaded_image.height
            new_width = int(new_height * aspect_ratio)
        
        resized_image = loaded_image.resize((new_width, new_height))
        photo = ImageTk.PhotoImage(resized_image)
        img_label.config(image=photo)
        img_label.image = photo
        update_info()

def save_image():
    """Функция для сохранения изображения."""
    global loaded_image
    file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png"), ("All files", "*.*")])
    if file_path:
        loaded_image.save(file_path)

def load_image():
    """Функция для загрузки изображения и обновления информации."""
    global loaded_image, img_label, info_label

    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png;*.gif")])
    if file_path:
        loaded_image = Image.open(file_path)
        display_image = scale_image(loaded_image)  # Масштабируем изображение
        photo = ImageTk.PhotoImage(display_image)
        img_label.config(image=photo)
        img_label.image = photo
        update_info()

def scale_image(image):
    """Функция для масштабирования изображения, если оно больше размера окна."""
    window_width = root.winfo_width()
    window_height = root.winfo_height()
    image_width, image_height = image.size
    
    if image_width > window_width or image_height > window_height:
        aspect_ratio = image_width / image_height
        new_width = window_width if image_width > window_width else int(window_height * aspect_ratio)
        new_height = window_height if image_height > window_height else int(window_width / aspect_ratio)
        return image.resize((new_width, new_height))
    else:
        return image

def update_info():
    """Функция для обновления информации о изображении."""
    global loaded_image, info_label

    if loaded_image:
        info_text = f"Размер: {loaded_image.width}x{loaded_image.height} пикселей\nФормат: {loaded_image.format}"
        info_label.config(text=info_text)

if __name__ == "__main__":
    root = tk.Tk()
    root.title("Изменение разрешения изображения")
    root.geometry("800x600")  # Настройка размера окна

    # Создание интерфейса
    load_button = tk.Button(root, text="Загрузить изображение", command=load_image)
    load_button.pack(pady=10)

    keep_aspect_var = tk.IntVar()
    keep_aspect_checkbox = tk.Checkbutton(root, text="Сохранить пропорции", variable=keep_aspect_var)
    keep_aspect_checkbox.pack(pady=10)

    width_label = tk.Label(root, text="Новая ширина:")
    width_label.pack()
    width_entry = tk.Entry(root)
    width_entry.pack()

    height_label = tk.Label(root, text="Новая высота:")
    height_label.pack()
    height_entry = tk.Entry(root)
    height_entry.pack()

    change_button = tk.Button(root, text="Изменить разрешение", command=change_resolution)
    change_button.pack(pady=10)

    save_button = tk.Button(root, text="Сохранить изображение", command=save_image)
    save_button.pack(pady=10)

    img_label = tk.Label(root)
    img_label.pack()

    info_label = tk.Label(root, text="")
    info_label.pack(pady=10)

    loaded_image = None
    update_info()

    root.mainloop()

Описание программы

  1. Кнопка “Загрузить изображение” позволяет пользователю выбрать файл изображения с помощью диалогового окна.
  2. После загрузки изображения пользователь может ввести новые значения ширины и высоты в соответствующие поля ввода.
  3. Кнопка “Изменить разрешение” применяет новые размеры к изображению и отображает его в лейбле.

Библиотека Pillow используется для загрузки и изменения размера изображений. Функция resize позволяет изменять разрешение изображения, сохраняя пропорции, если это необходимо.

Запустите эту программу, и вы сможете легко изменять разрешение изображений с помощью простого графического интерфейса.