Как преобразовать содержимое холста в изображение?

from Tkinter import * root = Tk() cv = Canvas(root) cv.create_rectangle(10,10,50,50) cv.pack() root.mainloop() 

Я хочу преобразовать содержимое холста в растровое изображение или другое изображение, а затем выполнять другие операции, такие как вращение или масштабирование изображения или изменение его координат.

Растровые изображения могут повысить эффективность, чтобы показать, если я больше не рисую.

Что мне делать?

  • Как получить строку и столбец конечной позиции текста в Tkinter?
  • Полоса прокрутки Python Tkinter для фрейма
  • ImportError при импорте Tkinter в Python
  • Как изменить цвет всего в графическом интерфейсе tkinter сразу
  • Python Вход в Tkinter Text Widget
  • Темы и tkinter python 3
  • Как добавить пространство между двумя виджетами, размещенными в сетке в tkinter ~ python?
  • Возможно ли создать окно Tkinter без рамки и фона?
  • 2 Solutions collect form web for “Как преобразовать содержимое холста в изображение?”

    Вы можете либо сгенерировать документ postscript (для подачи в другой инструмент: ImageMagick, Ghostscript и т. Д.):

     from Tkinter import * root = Tk() cv = Canvas(root) cv.create_rectangle(10,10,50,50) cv.pack() root.mainloop() cv.update() cv.postscript(file="file_name.ps", colormode='color') root.mainloop() 

    или нарисовать одно и то же изображение параллельно на PIL и на холсте Tkinter (см. Сохранение рисунка холста Tkinter (Python) ). Например (вдохновленный той же статьей):

     from Tkinter import * import Image, ImageDraw width = 400 height = 300 center = height//2 white = (255, 255, 255) green = (0,128,0) root = Tk() # Tkinter create a canvas to draw on cv = Canvas(root, width=width, height=height, bg='white') cv.pack() # PIL create an empty image and draw object to draw on # memory only, not visible image1 = Image.new("RGB", (width, height), white) draw = ImageDraw.Draw(image1) # do the Tkinter canvas drawings (visible) cv.create_line([0, center, width, center], fill='green') # do the PIL image/draw (in memory) drawings draw.line([0, center, width, center], green) # PIL image can be saved as .png .jpg .gif or .bmp file (among others) filename = "my_drawing.jpg" image1.save(filename) root.mainloop() 

    Я нашел отличный способ сделать это, что действительно полезно. Для этого вам нужен модуль PIL. Вот код:

     from PIL import ImageGrab def getter(widget): x=root.winfo_rootx()+widget.winfo_x() y=root.winfo_rooty()+widget.winfo_y() x1=x+widget.winfo_width() y1=y+widget.winfo_height() ImageGrab.grab().crop((x,y,x1,y1)).save("file path here") 

    Это означает, что вы передаете имя виджетов в функцию. Команда root.winfo_rootx() и root.winfo_rooty() получают положение пикселя в левом верхнем углу от общего root окна.

    Затем добавляются widget.winfo_x() и widget.winfo_y() , в основном просто получают координату пикселя верхнего левого пикселя виджета, который вы хотите захватить (в пикселях (x, y) вашего экрана) ,

    Затем я нахожу (x1, y1), который является нижним левым пикселем виджета. ImageGrab.grab() создает печатный экран, и затем я обрезаю его, чтобы получить только бит, содержащий виджет. Хотя это и не идеально, и не будет делать лучший образ, это отличный инструмент для простого получения изображения любого виджета и его сохранения.

    Если у вас есть вопросы, отправьте комментарий! Надеюсь, это помогло!

    Python - лучший язык программирования в мире.