68.58K
Category: softwaresoftware

Компьютерная графика. Лабораторная работа 2, 3, 4, 5

1.

Лабораторная работа 2, 3,
4, 5
По предмету «Компьютерная графика»

2.

Оглавление
• Лаба 2 – 3 слайд
• Лаба 3 – 18 слайд

3.

Задание 1
Подключение модулей
• import tkinter as tk
• from PIL import ImageTk, Image

4.

Задание 1
Создание окна и размещение картинки
• window = tk.Tk()
• window.title(«имя_окна")
• image = Image.open(“путь_к_картинке”)
• image.show()

5.

Получить и вывести в интерактивное окно
параметры графического файла: формат, размеры,
цветовой режим, имя файла.
• image = Image.open(file_path)
• format = image.format
• size = image.size
• mode = image.mode
• name = file_path.split("/")[-1]

6.

Сохранить файл в разных графических форматах
• image.save(file_name + "." + mode.lower(), mode)
Изменить размеры изображения методами resize() и
reduce(). Записать измененные изображения в файлы
• resized_image = image.resize((x, y))
• resized_image.save("resized_image.jpg", "JPEG")
• reduced_image = image.reduce(size)

7.

Изменение изображения
• Вырезать части изображений
• cropped_image = image.crop((400, 400, 500, 500))
• Повернуть одно изображение
• rotated_image = image.rotate(90)
• Выполнить наложение одного изображения на другое
• image2 = Image.open(file_path2)
• image.paste(image2)

8.

Изменение изображения
• Выполнить зеркальное отображение изображения
• mirrored_image = image.transpose(Image.FLIP_LEFT_RIGHT)
• Применить к изображению любой из допустимых в PIL фильтров.
• filtered_image = image.filter(ImageFilter.BLUR)

9.

Создание коллажа
• collage_image = Image.new("RGB", (collage_width, collage_height))
• collage_image.paste(image, (0, 0)) #где image – изображение для
вставки, а (0,0) координаты размещения

10.

Задание 2
Создать виджет Canvas, с помощью create_image разместить
изображение, считав с помощью PhotoImage
• root = tk.Tk()
• original_image = Image.open(‘путь_к_картинке’)
• canvas_original = tk.Canvas(root, width=600, height=600)
• canvas_original.pack(side=tk.LEFT)
• image_tk = ImageTk.PhotoImage(original_image)
• canvas_original.create_image(0, 0, anchor=tk.NW, image=image_tk)
• canvas_original.image = image_tk
• canvas2 = tk.Canvas(root, width=600, height=600)
• canvas_transformed.pack(side=tk.RIGHT)

11.

С помощью клавиш со стрелками заставить
изображение перемещаться по виджету в
четырех направлениях
• def move_image(event):
• if event.keysym == "Up":
canvas1.move(image_item1, 0, -5)
• elif event.keysym == "Down":
canvas1.move(image_item1, 0, 5)
• elif event.keysym == "Left":
canvas1.move(image_item1, -5, 0)
• elif event.keysym == "Right":
canvas1.move(image_item1, 5, 0)
• canvas1.bind("<KeyPress>", move_image)

12.

Создать два виджета Canvas, на одном
разместить исходное
изображениеизображения со следующими
преобразованиями: поворот;
• def rotate_image(event):
• rotated_image = image.rotate(90)
• rotated_photo = ImageTk.PhotoImage(rotated_image)
• canvas2.itemconfig(image_item, image=rotated_photo)
• canvas2.image = rotated_photo

13.

увеличение/ уменьшение размеров
• def resize_image(event):
• resized_image = image.resize((400, 400))
• resized_photo = ImageTk.PhotoImage(resized_image)
• canvas2.itemconfig(image_item, image=resized_photo)
• canvas2.image = resized_photo

14.

выделение части изображения
• def crop_image(event):
• cropped_image = image.crop((0, 0, 100, 100))
• cropped_photo0 = ImageTk.PhotoImage(cropped_image)
• canvas2.itemconfig(image_item, image=cropped_photo)
• canvas2.image = cropped_photo

15.

зеркальное отображение
• def mirror_image(event):
• mirrored_image = image.transpose(Image.FLIP_LEFT_RIGHT)
• mirrored_photo = ImageTk.PhotoImage(mirrored_image)
• canvas2.itemconfig(image_item, image=mirrored_photo)
• canvas2.image = mirrored_photo

16.

При нажатии левой кнопки мыши разместить
одинаковые или разные изображения по
местоположению курсора мыши
• def place_image(event):
• x, y = event.x, event.y
• canvas1.create_image(x, y, anchor=tk.CENTER, image=photo,
tags="placed_image")

17.

Привязать событие к клавише
• canvas.bind("<KeyPress-A>", rotate_image)

18.

Лабораторная работа № 3
Заданиие 1
Движение изображения к заданному месту
• my_image = PhotoImage(file=‘image.gif')
• def m1(e):
• p = c.create_image(10, 10, image=cat_image,
• anchor=NW)
• x=e.x
• y=e.y
• for i in range(60):
• c.move(p, x/60, y/60)
• root.update()
• time.sleep(0.05)
• c.bind('<1>',m1)
• root.mainloop()

19.

ограничение по границам Canvas (при
выполнений задания делать отскок по всем
границам)
• x = rnd(100, 700)
• y = rnd(100, 500)
• r = rnd(30, 50)
• vy = 0
• vx = 10
while x<1000:
• y += vy
• x += vx
• vy += 0.3
• vx *= 0.99
• if y > 550:
vy *= -1
canv.coords(jumper,x-r,y-r,x+r,y+r)
canv.update()
time.sleep(0.03)
mainloop()

20.

анимация размера примитива и
растрового изображения на Canvas.
• def anim():
• global start,sz
• finish=time.time()
• sz=sz+1
• x=c.coords(ball)[0]
• y=c.coords(ball)[1]
• if finish-start<15:
c.coords(ball, x - sz, y - sz, y +sz, y + sz)
• c.after(100,anim)

21.

Анимация цвета примитива на Canvas.
• colors = ['red', 'orange', 'yellow', 'green', 'blue']
• def new_ball():
• canv.delete(ALL)
• canv.create_oval(x - r, y - r, x + r, y + r,
• fill=choice(colors), width=0)
• root.after(1000, new_ball)
• def click(event):
• print('click')
• new_ball()
• canv.bind('<Button-1>', click)

22.

Задание 2
Импорт библиотеки, открытие спрайтов (на
одной картинке)
from PIL import Image
• my_frame = Image.open(‘имя_картинки.png')
• width, height = my_frame.size
• frames = []

23.

Вариант 1. Цикл для разбития спрайта на
кадры
• Если на одной картинки вся анимация
• for frame_number in range(1, 8):
• frame = Image.open(f'image{frame_number}.png')
• frame = frame.resize((width, height))
• frames.append(frame)

24.

Вариант 2. Добавление картинок, если все
кадры расположены в разных файлах
• Через цикл открываем каждую картинку
• overlay = Image.open(f'image{frame_number}.png').resize((width,
height))
• image.paste(overlay, (0, 0), overlay)
• frames.append(image)

25.

Преобразование кадров в GIF
• frames[0].save(‘имя_гиф.gif', save_all=True,
append_images=frames[1:], optimize=True, duration=100, loop=0)
English     Русский Rules