Графические примитивы


Функции:сanvas(root,width=w,height=h,bg="blue", \ cursor="pencil") # определение холстаcanv.create_line(0,0,30,50,width=3,fill="blue", arrow=LAST) # линияcanv.create_rectangle(x,y,x+8,y+5,fill="red", \ outline="red") # прямоугольник # outline – цвет границыcanv.create_polygon([250,100],[200,150],[300,150], \ fill="red") # fill – цвет заливкиcanv.create_oval([20,200],[150,300],fill="gray50") # овал

Пример 1. Построение координатных осей.

from math import*
fromtkinter import*
root = Tk()
canv = Canvas(root, width = 100, height = 100, \ bg = "lightblue", cursor = "pencil")
canv.create_line(50,100,50,0,width=2,arrow=LAST)
canv.create_line(0,50,100,50,width=2,arrow=LAST)
canv.pack()
root.mainloop()

Пример 2. Построение осей координат.

from math import*
fromtkinter import*
f = input('f(x):')
root = Tk()
C = Canvas(root,width=1000, height=1000, bg = "white")
C.create_line(500,1000,500,0,width=2,arrow=LAST) # ось x
C.create_line(0,500,1000,500,width=2,arrow=LAST) # ось y
for x inrange(0,1000,50):
k = x - 500
C.create_line(x,497,x,503,width=1, fill = 'black')
C.create_text(x + 15,490,text=str(k), fill="purple", font=("Arial", "10"))
if(k != 0):
C.create_line(497,x,503,x,width=1,fill='black')
C.create_text(520, x, text = str(k), fill="purple",font=("Arial","10"))
C.pack()
root.mainloop()

Пример 3. Построение синусоиды.

from math import*
fromtkinter import*
importrandom
defdr():
a=float(txt_a.get())
b=float(txt_b.get())
c=float(txt_c.get())
f=random.choice(['red','black','green','darkblue']);
fori inrange(0,1000):
if(i%800==0):
k=i
С.create_line(k,247,k,253, width=0.5, fill='black')
С.create_text(k+15,240,text=str(k), fill="red", font=("Arial", "10"))
if(k!=0):
С.create_line(497,k-250,503,k-250, width=0.5, fill = 'black')
С.create_text(520,k-250,text=str(k), fill="red", font=("Arial","10"))
try:
x = i - 500
new_f = f.replace('x', str(x))
y = -eval(new_f) + 250
x += 500
С.create_oval(x, y, x + 1, y + 1, fill = 'red')
except:
pass
for i inrange(100):С.create_line(i-1,250+int((c+a*sin(b*(i-321)/180*3.14))

*200),i, 250+int((c+a*sin(b*(i-320)/180*3.14)) *200), width=0.5, fill=f)
defcl():
С.create_rectangle(0, 0, 1000, 500, fill='white')
С.create_line(500,500,500,0,width=2,arrow=LAST)
С.create_line(0,250,1000,250,width=2,arrow=LAST)
root = Tk()
язу = Label(text="y=a*sin(bx)+c")
язу.pack()
язу_a = Label(text="a=")
язу_a.pack()
txt_a=Entry()
txt_a.pack()
язу_b = Label(text="b=")
язу_b.pack()
txt_b=Entry()
txt_b.pack()
язу_c = Label(text="c=")
язу_c.pack()
txt_c=Entry()
txt_c.pack()
btn=Button(root, text="
Построить", command=dr)
btn.pack()
btn1=Button(root, text="
Очистить", command=cl)
btn1.pack()
С = Canvas(root, width = 1000, height = 500, bg = "white", cursor = "arrow")
С.create_line(500,500,500,0,width=2,arrow=LAST)
С.create_line(0,250,1000,250,width=2,arrow=LAST)
С.pack()
root.mainloop()

Пример 4. Построение случайных кругов

from random import *

from tkinter import *

s = 400

root = Tk()

С = Canvas(root, width=s, height=s)

С.pack()

while 1:

c = choice(['aqua', 'blue', 'fuchsia', 'green', 'maroon', 'orange','pink','purple', \ 'red','yellow', 'violet', 'indigo', 'chartreuse', 'lime'])

x = randint(0, s)

y = randint(0, s)

d = 10+randint(0, s/5)

С.create_oval(x, y, x+d, y+d, fill=c)

root.update()

Пример 5. Построение случайных кругов и прямоугольников с границей кнопкой управления

from random import * # импорт методов модуля random

from tkinter import *

def change():

b1['text'] = "Үзгәртелгән - Изменено"

b1['bg'] = '#000000'

b1['activebackground'] = '#aaaaaa'

b1['fg'] = '#ffffff'

b1['activeforeground'] = '#ffffff'

K=1-K

s = 600

root = Tk() # создает окно

canvas = Canvas(root, width=s, height=s) # создает холст размера s

canvas.pack() # расположение холста в окне

D = 0

K = 1

b1 = Button(text="Үзгәртү - Изменить", width=15, height=3)

b1.config(command=change)

b1.pack()

while True : #D < 3000:

d = randint(10, s // 5)

c = choice(['aqua','blue','green','orange','red','yellow', 'violet'])

g = choice(['aqua','blue','green','orange','red','yellow', 'violet'])

x = randint(-d, s)

y = randint(-d, s-20)

k = randint(0, 3)

if K*k==0 :

canvas.create_oval(x, y, x+d, y+d, fill=c, outline=g, width=3)

elif k==1 :

canvas.create_rectangle(x,y,x+d,y+d,fill=c,outline=g,width=3,activedash=(5,4))

root.update()

D += 1

Пример 6. Масштабирование рисунка

from PIL import Image, ImageDraw

image = Image.open("cat.jpg")

draw = ImageDraw.Draw(image) # прорисовка рисунка

width = image.size[0] # ширина рисунка

height = image.size[1] # высота рисунка

pix = image.load()

image.show() # показ данного рисунка

Smalled=image.resize((width//2, height//2), Image.ANTIALIAS)

Smalled.show(); # показ уменьшенного вдвое рисунка

Biged=image.resize((width*2, height*2), Image.ANTIALIAS)

Biged.show(); # показ увеличенного вдвое рисунка

cropImg=image.crop((100,0,360,400))

cropImg.show();

Пример 7. Построение градиенты цветов.

import tkinter as tk

# from math import sqrt

def average(hex1, hex2, percent):

percent = 1 if percent > 1 else 0 if percent < 0 else percent

rgb1 = [int(hex1[i:i + 2], 16) for i in range(1, 7, 2)]

rgb2 = [int(hex2[i:i + 2], 16) for i in range(1, 7, 2)]

f = '#'

for i in range(3):

temp = hex(int(rgb1[i] + (rgb2[i] - rgb1[i]) * percent))[2:]

f += '0' + temp if len(temp) == 1 else temp

return f

res = 500

x1, y1, color1 = 100, 100, '#FF003A'

x2, y2, color2 = 400, 280, '#D9FF3A'

root = tk.Tk()

canv = tk.Canvas(width=res, height=res, bg='grey10')

for i in range(res + 2):

canv.create_line(i, 0, i, res + 2, fill=average(color1, color2, i / res))

canv.pack()

root.mainloop()

Пример 8. Тиражирование рисунка.

from tkinter import *
from PIL import ImageTk, Image
root = Tk()
canvas = Canvas(root, width=1000, height=1000)
canvas.pack()
pilImage = Image.open("univer.jpg")
image = ImageTk.PhotoImage(pilImage)
for y in range(100,1000,200) :
for x in range(100,1000,200) :
image.show = canvas.create_image(x, y, image=image)
mainloop()

Задан файл «univer.jpg» с рисунком

Программа выведет следующее изображение

Рассмотрим еще одну задачу

Canvas (холст) — объект библиотеки tkinter, позволяющий располагать на себе другие объекты. Это могут быть геометрические фигуры, узоры, вставленные изображения и другие видео объектов (например, метки, кнопки, текстовые поля). И это еще не все. Отображенные на холсте объекты можно изменять и перемещать (при желании) в процессе выполнения скрипта. Учитывая все это, canvas находит широкое применение при создании GUI-приложений c использованием tkinter (создание рисунков, оформление других ВО, реализация функций графических редакторов, программируемая анимация и др.).

Для создания объект-холст вызывается класс модуля tkinter и устанавливаются некоторые параметры. Например:

from tkinter import *
root = Tk()
c=Canvas(root,width=600,height=600,bg="white",cursor="pencil")

Далее с помощью любого менеджера геометрии разместить на главном окне.

Нулевая точка (0,0) для объекта Canvas располагается в верхнем левом углу. Единицы измерения пиксели (точки экрана).

Чтобы нарисовать линию на холсте применяется метод create_line.

c.create_line(80,80,180,80, fill='green', # зеленая линия width=5, arrow=LAST, dash=(10,2), # пунктирная линия со стрелкой activefill='lightgreen', arrowshape="10 20 10")

Четыре числа — это пары координат начала и конца линии, т.е в примере первая линия начинается из точки (200,50), а заканчивается в точке (300,50). Вторая линия начинается в точке (0,0), заканчивается — в (100,100). Свойство fill позволяет задать цвет линии отличный от черного, а arrow – установить стрелку (в конце, начале или по обоим концам линии).

Так для изображения осей можно написать

c.create_line(500,600,500,0,width=4,arrow=LAST)c.create_line(0,500,600,500,width=4,arrow=LAST)

Метод create_rectangle создает прямоугольник. Аналогично линии в скобках первыми аргументами прописываются четыре числа. Первые две координаты обозначают верхний левый угол прямоугольника, вторые — правый нижний.

x = 70y = 110c.create_rectangle(x,y,x+80,y+50,fill="white",outline="blue")

Опция outline определяет цвет границы прямоугольника.

Многоугольник определяется парами координат для каждой его точки.

c.create_polygon([250,100],[200,150],[300,150],fill="red")

Квадратные скобки при задании координат используются для удобочитаемости (их можно не использовать). Свойство smooth задает сглаживание.

canv.create_polygon(300,80,400,80,450,75,450,200,300,180,330, \ 160,outline="brown",smooth=0,width=4)c.create_polygon(300,380,400,380,450,375,450,500,300,480,330, \ 460,outline="orange",smooth=1,width=4)

При создании эллипса задаются координаты прямоугольника, описывающего данный эллипс.

c.create_oval(10, 10, 110, 110, width=2)c.create_oval(10, 120, 190, 190, fill='yellow', outline='white')

Более сложная фигура получается методом create_arc. В зависимости от значения опции style можно получить сектор (по умолчанию), сегмент (CHORD) или дугу (ARC). Координаты по-прежнему задают прямоугольник, в который вписана окружность, из которой «вырезают» сектор, сегмент или дугу. От опций start и extent зависит угол фигуры.

c.create_arc(160,230,230,330,start=0,extent=240, fill="lightgreen")c.create_arc(250,230,320,360,start=30,extent=300,style=CHORD, fill="green", width=5)c.create_arc(340,230,410,330,start=0,extent=140,style=ARC, outline="darkgreen", width=2)

Последний метод объекта canvas, который будет рассмотрен в этом уроке — это метод создающий текстовую надпись.

c.create_text(20,430,text="РӘСЕМНӘР",font="arial 36", anchor="w", justify=CENTER,fill="darkred")

Трудность здесь может возникнуть с пониманием опции anchor (якорь). По умолчанию в заданной координате располагается центр текстовой надписи. Чтобы изменить это и, например, разместить по указанной координате левую границу текста, используется якорь со значением w (от англ. west – запад). Другие значения: n, ne, e, se, s, sw, w, nw. Если букв, задающих сторону привязки две, то вторая определяет вертикальную привязку (вверх или вниз «уйдет» текст от координаты). Свойство justify определяет выравнивание текста.

Часто требуется нарисовать повторяющиеся элементы, изображение которых обеспечивается через циклы. Например:

y=10while y<450: c.create_rectangle(520,y,570,y+50,fill="lightgrey") c.create_line(y,520,y+50,570,fill="green",width=10) c.create_line(y+50,520,y,570,fill="darkgreen", width=10) y += 60

Программа завершается

canv.pack()
root.mainloop()

Приведенный код даст следующее изображение:

from tkinter import *
def move():
x = int(txt_x.get())
y = int(txt_y.get())
c.move(ball, x, y)
c.move(rect, x, y)
c.move(rect_in, x, y)
c.move(line1, x, y)
c.move(line2, x, y)
#c.move(ALL, x, y)
root = Tk()
txt_x = Entry()
txt_x.pack()
labelx = Label(text="x")
labelx.pack()
txt_y = Entry()
txt_y.pack()
labely = Label(text="y")
labely.pack()
c = Canvas(root, width=500, height=500)
c.pack()
rect = c.create_rectangle(10, 55, 75, 120, fill='orange')
ball = c.create_oval(10, 55, 75, 120, fill='yellow')
rect_in = c.create_rectangle(20,65,65,110, fill='white')
line1 = c.create_line(10,55,43,20)
line2 = c.create_line(43,20,75,55)
btn = Button(root, text="Переместить", command = move)
btn.pack()
root.mainloop()

Текст в CANVAS

# -*- coding: utf8 -*-

import turtle

from tkinter import *

root=Tk()

root.title('Домик')

c = Canvas(root,width=500,height=500,bg="lightblue",cursor="pencil")

c.create_rectangle(20,150,300,450,fill="green",outline="black")

c.create_polygon([20,150],[160,30],[300,150],fill="blue",outline="blue")

c.create_polygon([300,450],[300,300],[400,300],[400,375],[480,375], \ [480,450],fill="red",outline="red")

c.create_oval(400,10,480,80,fill="yellow",outline="yellow")

c.create_line(300,150,300,30,width=2,fill="black")

c.create_line(300,30,270,0,width=2,fill="black")

c.create_line(300,30,330,0,width=2,fill="black")

c.create_arc([20,20], [100,100], start=220, extent=180, style=ARC, \ outline="darkred",width=2)

c.create_text(40,320,text="Домик в деревне.",font="Verdana 12", \ anchor="w",justify=CENTER,fill="darkblue")

c.create_text(40,340,text="Вот моя деревня,",font="Verdana 12", \ anchor="w",justify=CENTER,fill="darkblue")

c.create_text(40,360,text="Вот мой дом родной.",font="Verdana 12", \ anchor="w",justify=CENTER,fill="darkblue")

c.create_text(40,380,text="Вот качусь я в санках",font="Verdana 12", \ anchor="w",justify=CENTER,fill="darkblue")

c.create_text(40,400,text="По горе крутой...",font="Verdana 12", \ anchor="w",justify=CENTER,fill="darkblue")

c.pack()

root.mainloop()

Поворот рисунка

90 градусов, 45 градусов

__author__ = 'PVKlenkov'
import tkinter as tk
import math, cmath
root = tk.Tk()
c = tk.Canvas(root, width=900, height=900)
def update_button_text():
global angle_entry, angle_confirm_button
angle_confirm_button["text"] = "Rotate on %s" % angle_entry.get()
root.after(100, update_button_text)
def init_image():
for color in polygons:
c.create_polygon(polygons[color], fill=color, tag=color+"_square")
def draw_image(points, color):
c.delete(color+"_square")
return c.create_polygon(points, fill=color, tag=color+"_square")
def rotate_image(polygons, angle, center):
global inputed_angles
angle = math.radians(angle)
inputed_angles += angle
cos_v = math.cos(inputed_angles)
sin_v = math.sin(inputed_angles)
for color in polygons:
cx, cy = center
new_points = []
for x_old, y_old in polygons[color]:
x_old -= cx
y_old -= cy
x_new = x_old * cos_v - y_old * sin_v
y_new = x_old * sin_v + y_old * cos_v
new_points.append((x_new + cx, y_new + cy))
draw_image(new_points, color)
rect_width = 250
center = (450,450)
colors = [["red","blue"],["yellow","green"]]
polygons = {
"red": ((150,150), (150,400), (400,400), (400,150)),
"yellow": ((150,400), (150,650), (400,650), (400,400)),
"blue": ((450,200), (700,200), (700,450), (450,450)),
"green": ((450,450), (700,450), (700,700), (450,700))
}
root.resizable(False, False)
angle_entry = tk.Entry(root)
angle_entry.delete(0,tk.END)
angle_entry.insert(0,"0")
angle_confirm_button = tk.Button(root, text=angle_entry, \
command = lambda: rotate_image(polygons, \
int(angle_entry.get()), center))
init_image()
inputed_angles = 0
c.pack()
angle_entry.pack()
angle_confirm_button.pack()
update_button_text()
root.mainloop()

 

Второй пример программы вращения, использующей полигон четырехугольника с изменением координат примитивов.

from tkinter import*
c = Canvas(width=1000, height=1000)
c.pack()
xy = [(100, 100), (250, 150), (250, 250), (150, 250)]
polygon_item = c.create_polygon(xy)
center = 400, 400
defgetangle(event):
dx = c.canvasx(event.x) - center[0]
dy = c.canvasy(event.y) - center[1]
try:
returncomplex(dx, dy) / abs(complex(dx, dy))
exceptZeroDivisionError:
return0.0
defpress(event):
globalstart
start = getangle(event)
defmotion(event):
globalstart
angle = getangle(event) / start
offset = complex(center[0], center[1])
newxy = []
forx, y inxy:
v = angle * (complex(x, y) - offset) + offset
newxy.append(v.real)
newxy.append(v.imag)
c.coords(polygon_item, *newxy)
c.bind("<Button-1>", press)
c.bind("<B1-Motion>", motion)
mainloop()

Поточечное перемещение рисунка.

from tkinter import*
root = Tk()
c = Canvas(root, width=500, height=500)
c.pack()
defrotate_image(img, st):
w, h = img.width(), img.height()
ifst in['left', 'right']:
fun = PhotoImage(width=h, height=w)
else: # 180 gradusov
fun = PhotoImage(width=w, height=h)
forx inrange(w):
fory inrange(h):
rgb = '#%02x%02x%02x'% img.get(x, y)
ifst == 'right':
fun.put(rgb, (h-y,x))
elifst == 'left':
fun.put(rgb, (y,w-x))
else:
fun.put(rgb, (w-x,h-y))
returnfun

img = PhotoImage(file=r"rasem.png")
a = rotate_image(img,'simmetrichno')
b = rotate_image(img,'right')
b = rotate_image(img,'left')
Img = c.create_image(100,100, image=a)
#Img = c.create_image(100,100, image=b)
#Img = c.create_image(100,100, image=c)
root.mainloop()

Пример 10. Рассмотрим центральную симметрию для случайного треугольника.

from math import *
from tkinter import *
import random
from tkinter import messagebox as mb
def click_button_1():
c.delete("all")
ax = random.randint(0,800)
ay = random.randint(0,800)
bx = random.randint(0,800)
by = random.randint(0,800)
cx = random.randint(0,800)
cy = random.randint(0,800)
c.create_polygon(ax, ay, bx, by, cx, cy)
c.create_line(400,800,400,0, width=2, arrow=LAST)
c.create_line(0,400,800,400, width=2, arrow=LAST)
if mb.askyesno(title="Вопрос",
message="Построить симметричный треугольник?\n \
Симметрик эчпочмак сызыргамы?\n \
Construct a symmetrical triangle"):def click_symmetry_button(ax, ay, bx, by, cx, cy):
c.create_polygon(800-ax,800-ay, 800-bx,800-by, 800-cx,800-cy,
fill = 'red')
root = Tk()
c = Canvas(root, width=800, height=800, bg="white")
c.create_line(400,8000,400,0,width=2,arrow=LAST)
c.create_line(0,400,800,400,width=2,arrow=LAST)
btn1 = Button(text="Треугольник\nЭчпочмак\nTriangle",
background="#fff", foreground="#000",
padx="20", pady="8", font="16", command=click_button_1)

btn1.pack(side = LEFT)
c.pack()
root.mainloop()

Получается следующее изображение


Библиотека PIL

Библиотека PIL – модуль Python Imafing Library, имеющий следующие возможности:

·поддержка бинарных, полутоновых, индексированных, полноцветных и CMYK изображений;

·поддержка форматов BMP, EPS, GIF, JPEG, PDF, PNG, PNM, TIFF и некоторых других на чтение и запись;

·поддержка множества форматов (ICO, MPEG, PCX, PSD, WMF и др.) только для чтения;

·конвертирование изображений из одного формата в другой;

·редактирование изображений (использование различных фильтров, масштабирование, рисование, аффинное преобразвание рисунка, вращение, матричные операции и т. д.);

 

From PIL import Image # Подключение модуля

f=open(‘foto.jpg’,’rb) # Открытие файла рисунка

Рисунок= f.read()

Рисунок= Image.open(f) # Запись рисунка из файла

Рисунок.size(800,800) # Определяется размер рисунка

f.close() # Закрытие файла

Рисунок[30,40]=(255,100,0) # определяет оранжевый цвет в точке (30, 40)

Рисунок.getpixel((i,j)) # получает цвет пикселя

Рисунок.putpixel((i,j),(100,150)) # окрашивает цвет пикселя

Рәсем = Рисунок.copy # создание копии в Рәсем

Рисунок.show # просматриает изображение

Рисунок.save(‘rasem.jpg’) # сохранение

Рисунок=image.new(‘RGB,(100,100),”green”) # cоздание нового изображения c зеленым фоном

Рисунок.rotate(45,expand=true) # поворот рисунка на 45 градусов с увеличением размера.

Пример 1. Перевод цветного рисунка в оттенки серого.

from PIL import Image, ImageDraw
рис = Image.open("бүре.jpg") # волк
кар = ImageDraw.Draw(рис)
шир = рис.size[0]
выс = рис.size[1]
pix = рис.load()
for i in range(шир):
for j in range(выс):
r = pix[i, j][0]
g = pix[i, j][1]
b = pix[i, j][2]
S = (r + g + b) // 3 # среднеарифметический цвет RGB-точки
кар.point((i, j), (S, S, S))# среднеарифмитисекого серого цвета
рис.save("соры_бүре.jpg", "JPEG") # серый волк

 

Пример 2. Перевод серого рисунка в черно белый.

from PIL import Image, ImageDraw
рис = Image.open("соры_бүре.jpg") # серый волк
кар = ImageDraw.Draw(рис)
шир = рис.size[0]
выс = рис.size[1]
pix = рис.load()
for i in range(шир):
for j in range(выс):
if (pix[i, j][0] + pix[i, j][1] + pix[i, j][2]) > 384 :
S = 568 # точка белого цвета

else :

S = 0 # точка черного цвета

кар.point((i, j), (S, S, S))# среднеарифмитисекого серого цвета
рис.save("акбүре.jpg", "JPEG") # белый волк

Пример 3. Для горизонтального симметричного отображения рисунка можно написать следующую программу.

from PIL import Image, ImageDraw
рис = Image.open("соры_бүре.jpg") # серый волк
картина = ImageDraw.Draw(рис)
шир = рис.size[0]
выс = рис.size[1]
pix = рис.load()
for i in range(шир//2):
for j in range(выс):
a,b,c = pix[i, j][0], pix[i, j][1], pix[i, j][2]

картина.point((i, j), (pix[шир-i,j][0], pix[шир-i,j][1], pix[шир-i,j][2]))

картина.point((шир-i, j), (a, b, c))

рис.save("акбүре.jpg", "JPEG") # белый волк

Пример 4. Для вертикального симметричного отображения рисунка можно написать следующую программу.

from PIL import Image, ImageDraw
рис = Image.open("соры_бүре.jpg") # серый волк
картина = ImageDraw.Draw(рис)
шир = рис.size[0]
выс = рис.size[1]
pix = рис.load()
for i in range(шир):
for j in range(выс//2):
a,b,c = pix[i, j][0], pix[i, j][1], pix[i, j][2]

картина.point((i, j), (pix[i, выс-j][0], pix[i, выс-j][1], pix[i, выс-j][2]))

картина.point((i, выс- j), (a, b, c))

рис.save("акбүре.jpg", "JPEG") # белый волк

Пример 5. Для переноса одного фрагмента рисунка на другой можно написать следующую программу.

from PIL import Image

s=Image.open("1.jpg") # открытие файла с первым рисунком

g=Image.open("2.jpg") # открытие файла со вторым рисунком

area=(150,150,350,350) # определение выбираемой области

s.paste(g,area) # нанесение рисунка "2.jpg" на "1.jpg"

s.show() # получение изображения рисунка

Пример 6. Массштабирование. Уменьшение рисунка в К раз. Рисунок разбивается на квадраты КхК. Уменьшенный рисунок формироваться из средних цветов этих квадратов.

from PIL import Image, ImageDraw
рис = Image.open("1.jpg")
картина = ImageDraw.Draw(рис)
шир = рис.size[0]
выс = рис.size[1]
pix = рис.load()

К=int(input())
for i in range(шир//К):
for j in range(выс//К):
a=b=c=0

for u in range(i):
for v in range(j):
x,y=i*K+u,j*K+v

a,b,c= a+pix[x,y][0],b+pix[x,y][1],c+pix[x,y][2]

картинаК.point((i, j), (a//(K*K), b//(K*K), c//(K*K)))

рисК.save("2.jpg", "JPEG")

Пример 7. Массштабирование. Увеличение рисунка в К раз. В рисунке каждая точка заменяется квадратом КхК, окрашенным цветом соответствующей точки.

from PIL import Image, ImageDraw

рис = Image.open("1.jpg")

картина = ImageDraw.Draw(рис)

шир = рис.size[0]

выс = рис.size[1]

pix = рис.load()

К=int(input())

for i in range(шир):

for j in range(выс):

r,g,b= pix[i, j][0], pix[i, j][1], pix[i, j][2]

for u in range(К):

for v in range(К):

x,y=i*K+u,j*K+v

картинаК.point((x,y), (r,g,b))

рисК.save("2.jpg", "JPEG")




Дата добавления: 2022-04-12; просмотров: 167;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.056 сек.