В этом примере мы создадим графический интерфейс на 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()
Описание программы

- Кнопка “Загрузить изображение” позволяет пользователю выбрать файл изображения с помощью диалогового окна.
- После загрузки изображения пользователь может ввести новые значения ширины и высоты в соответствующие поля ввода.
- Кнопка “Изменить разрешение” применяет новые размеры к изображению и отображает его в лейбле.
Библиотека Pillow
используется для загрузки и изменения размера изображений. Функция resize
позволяет изменять разрешение изображения, сохраняя пропорции, если это необходимо.
Запустите эту программу, и вы сможете легко изменять разрешение изображений с помощью простого графического интерфейса.