Как сохранить холст черепахи как изображение (.png или .jpg) в формате Python 3 - PullRequest
0 голосов
/ 27 мая 2020

Я работал с модулем черепахи и хочу использовать его в качестве отправной точки для работы над простой программой распознавания изображений, которая могла бы распознавать числа / буквы. Мне нужно сохранить черепаху как изображение, которым я мог бы манипулировать - изменение, поворот и т. Д. c. чтобы попытаться отрегулировать изображения. Я часами занимаюсь исследованием и не могу найти ничего, что работает. Я обнаружил, как сохранить вывод черепахи как холст Tkinter:

import turtle
t = turtle.Turtle()
# Draw something
canvas = t.getscreen().getcanvas()  # Saves a Tkinter canvas object

Кажется, это отлично работает. Следующим шагом будет сохранение в формате .png или .jpg. Однако единственное, что я могу найти, - это как сохранить его в виде файла postscript:

canvas.postscript(file="turtle_img.ps")  # Saves as a .ps file

Оттуда я попытался преобразовать файл .ps в файл .png или .jpeg с помощью PIL. Вот мой код для этого и ошибка, которую я получаю:

from PIL import Image
turtle_img = Image.open("turtle_img.ps")
turtle_img.save("turtle_img", "png")
# Also tried:   turtle_img.save("turtle_img, "jpeg")

Запуск строки "turtle_img.save (" turtle_img "," png ") дает:

OSError: Unable to locate Ghostscript on paths

I хотелось бы одно из следующего: 1. способ конвертировать .ps в .jpeg, .png или даже растровое изображение 2. Альтернативный способ сохранения холста Tkinter, с которым легче работать

РЕДАКТИРОВАТЬ: Я хотел уточнить, что я буду работать с большим количеством из них и хотел бы автоматизировать процесс в сценарии, а не использовать командную строку для каждого изображения.

Все ответы будут оценены! Спасибо! заранее.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вы можете использовать Ghostscript для визуализации программы PostScript в растровое изображение. Например:

gs -sDEVICE=png16m -o out.png input.ps

Доступны другие форматы файлов и глубина цвета, такие как png256, jpeg и т.д. c. Если это многостраничный входной файл, то:

gs -sDEVICE=png16m -o out%d.png input.ps
0 голосов
/ 30 мая 2020

Вы можете напрямую сохранить холст как .png, если включите turtle в tkinter canvas. Это очень просто. .

Вот пример, который встраивает turtle в tk.Canvas, dr aws прокладку Серпинского и автоматически сохраняет созданный образ на диске.

enter image description here

import tkinter as tk
from PIL import ImageGrab
import turtle


def dump_gui():
    """
    takes a png screenshot of a tkinter window, and saves it on in cwd
    """
    print('...dumping gui window to png')

    x0 = root.winfo_rootx()
    y0 = root.winfo_rooty()
    x1 = x0 + root.winfo_width()
    y1 = y0 + root.winfo_height()
    ImageGrab.grab().crop((x0, y0, x1, y1)).save("gui_image_grabbed.png")


def draw_sierpinski(length, depth):
    if depth == 0:
        for i in range(0, 3):
            t.fd(length)
            t.left(120)
    else:
        draw_sierpinski(length / 2, depth - 1)
        t.fd(length / 2)
        draw_sierpinski(length / 2, depth - 1)
        t.bk(length / 2)
        t.left(60)
        t.fd(length / 2)
        t.right(60)
        draw_sierpinski(length / 2, depth - 1)
        t.left(60)
        t.bk(length / 2)
        t.right(60)


root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()

t = turtle.RawTurtle(canvas)

t.penup()
t.goto(-200, -175)
t.pendown()
draw_sierpinski(400, 6)
t.hideturtle()

dump_gui()

root.mainloop()
...