/
karik
/
Second
Обзор
Документация
Войти
/
karik
/
Second
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
laba2.py
125 строк
4 KB
karik
upload files
20 окт 2025, 00:53
20 окт 2025, 00:53
4400ba8
Код
Авторство
О чём код?
import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTk, ImageDraw import math root = tk.Tk() root.title("Графическая программа") root.geometry("800x600") base_image = None result_image = None img_label = tk.Label(root) img_label.pack(pady=10) # === Создание нового изображения === def create_new_image(): global base_image, result_image base_image = Image.new("RGB", (600, 400), (255, 255, 255)) result_image = base_image.copy() show_image(result_image) # === Добавление центрального фрагмента исходного изображения === def add_fragment_center(): global result_image if result_image is None: messagebox.showwarning("Ошибка", "Сначала создайте новое изображение!") return file_path = filedialog.askopenfilename( filetypes=[("Изображения", "*.png *.jpg *.jpeg *.bmp")] ) if not file_path: return img = Image.open(file_path).convert("RGB") # Определяем центральный квадрат (или прямоугольник) w, h = img.size crop_size = min(w, h) // 2 # половина меньшей стороны left = (w - crop_size) // 2 top = (h - crop_size) // 2 right = left + crop_size bottom = top + crop_size fragment = img.crop((left, top, right, bottom)) fragment.thumbnail((200, 200)) # Вставляем в центр нового изображения x = (result_image.width - fragment.width) // 2 y = (result_image.height - fragment.height) // 2 result_image.paste(fragment, (x, y)) show_image(result_image) # === Добавление осей координат и графика exp(x) === def add_axes_and_graph(): global result_image if result_image is None: messagebox.showwarning("Ошибка", "Сначала создайте изображение!") return draw = ImageDraw.Draw(result_image) w, h = result_image.size cx, cy = w // 2, h // 2 + 80 # Центр координат # Оси draw.line((0, cy, w, cy), fill="black", width=2) draw.line((cx, 0, cx, h), fill="black", width=2) draw.text((w - 20, cy + 5), "x", fill="black") draw.text((cx + 5, 5), "y", fill="black") # Масштаб scale_x = 50 scale_y = 20 # Точки для exp(x) points = [] for px in range(cx - 200, cx + 200): x = (px - cx) / scale_x y = math.exp(x) py = cy - y * scale_y if 0 <= py < h: points.append((px, py)) # Рисуем график if len(points) > 1: draw.line(points, fill="red", width=2) show_image(result_image) # === Отображение изображения === def show_image(img): img_tk = ImageTk.PhotoImage(img) img_label.configure(image=img_tk) img_label.image = img_tk # === Сохранение результата === def save_image(): global result_image if result_image is None: messagebox.showwarning("Ошибка", "Нет изображения для сохранения!") return file_path = filedialog.asksaveasfilename( defaultextension=".png", filetypes=[("PNG файлы", "*.png")], ) if not file_path: return result_image.save(file_path) messagebox.showinfo("Готово", f"Изображение сохранено в:\n{file_path}") # === Кнопки управления === tk.Button(root, text="Создать новое изображение", command=create_new_image).pack(pady=5) tk.Button(root, text="Вставить центральный фрагмент", command=add_fragment_center).pack(pady=5) tk.Button(root, text="Добавить оси и график exp(x)", command=add_axes_and_graph).pack(pady=5) tk.Button(root, text="Сохранить изображение", command=save_image).pack(pady=5) root.mainloop()