Similar presentations:
Компьютерная графика. Лабораторная работа 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)