Я хотел бы иметь возможность рисовать на изображении, отображаемом на холсте tkinter PIL. Я попробовал поиск в Google, но все результаты были бы такими, как рисовать изображение без tkinter или как отображать изображение, которое мне не нужно. Я также хотел бы, чтобы это было похоже на живое (цвет, пока я двигаю мышью). Есть какой-либо способ сделать это. Если нет способов с PIL, есть ли способ с tkinter.
Да, я изучил это, но я не знаю, как использовать это с tkinter.
Я думаю, что лучшим подходом было бы рисовать с помощью tkinter
, потому что в противном случае вам нужно будет постоянно обновлять виджет холста каждый раз, когда изображение изменяется с помощью PIL (что может быть слишком медленным и мешать «живому» рисованию).
tkinter
Canvas
имеют несколько различных возможностей рисования векторов и текста, и вы можете рисовать/отображать их наверху изображения, которое также отображается им. Это означает, что если вы сначала добавите изображение, все, что будет нарисовано дальше, появится поверх него (если оно перекрывает изображение).
Ниже приведена демонстрация того, как это сделать. Примечание. Я позаимствовал часть кода и образец изображения со страницы python-course.eu: Виджеты Canvas в Tkinter. В нем описываются средства рисования, предоставляемые Canvas
виджетами.
from PIL import Image, ImageTk
import tkinter as tk
from tkinter.constants import *
canvas_width, canvas_height = 300, 300
root = tk.Tk()
canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
img = ImageTk.PhotoImage(file='rocks.png')
canvas.create_image(20, 20, anchor=NW, image=img)
# Draw something on top of image.
points = [100, 140, 110, 110, 140, 100, 110, 90, 100, 60, 90, 90, 60, 100, 90, 110]
canvas.create_polygon(points, outline='green', fill='yellow', width=3)
root.mainloop()
Вот изображение rocks.png
, которое использует код.
Скриншот результата:
Вы можете использовать модуль Pillow
ImageDraw
.