export as image
This commit is contained in:
@ -3,6 +3,8 @@ import turtle
|
||||
import lSystems
|
||||
import pickle
|
||||
from dataclasses import dataclass
|
||||
from PIL import Image
|
||||
import io
|
||||
|
||||
@dataclass
|
||||
class Save:
|
||||
@ -76,7 +78,8 @@ l: ein Lindenmayer-System löschen
|
||||
b: Hintergrundfarbe ändern
|
||||
q: Programm beenden
|
||||
s: Lindenmayer-Systeme speichern
|
||||
r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
||||
r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen
|
||||
e: als Bilddatei exportieren""")
|
||||
case "d":
|
||||
for i, lSystem in enumerate(lSystems.LSystems):
|
||||
print(f"{i}: {lSystem.name}")
|
||||
@ -90,7 +93,7 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
||||
match input("Möchtest du das das Lindenmayer-System das ganze Fenster ausfüllt? [J/n]: ").lower():
|
||||
case "j"|"":
|
||||
inputError = False
|
||||
drawer.draw(lSystem, recursionDepth, turtle.Vec2D(0, 0), rotation, turtleObject.screen._window_size(), color)
|
||||
drawer.draw(lSystem, recursionDepth, turtle.Vec2D(0, 0), rotation, turtle.Vec2D(turtleObject.screen.window_width(), turtleObject.screen.window_height()) - turtle.Vec2D(3, 3), color)
|
||||
takeInput(turtleObject)
|
||||
case "n":
|
||||
inputError = False
|
||||
@ -128,27 +131,37 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
||||
try:
|
||||
file = open(filepath, "wb")
|
||||
pickle.dump(save, file)
|
||||
file.close()
|
||||
print("erfolgreich gespeichert")
|
||||
except Exception as err:
|
||||
print(err)
|
||||
finally:
|
||||
file.close()
|
||||
case "r":
|
||||
filepath = inputString("Datei, die geladen werden soll eingeben")
|
||||
save: Save
|
||||
try:
|
||||
file = open(filepath, "rb")
|
||||
save = pickle.load(file)
|
||||
file.close()
|
||||
turtleObject.screen.clear()
|
||||
backgroundColor = save.backgroundColor
|
||||
turtleObject.screen.bgcolor(save.backgroundColor)
|
||||
for drawingInfo in save.drawingInfos:
|
||||
drawing = drawer.Drawing(drawingInfo, drawer.newTurtle())
|
||||
drawer.drawScaled(drawing)
|
||||
except Exception as err:
|
||||
print(err)
|
||||
case "e":
|
||||
# https://stackoverflow.com/questions/34777676/how-to-convert-a-python-tkinter-canvas-postscript-file-to-an-image-file-readable
|
||||
canvas = turtleObject.screen.getcanvas()
|
||||
postscript = canvas.postscript(colormode = "color")
|
||||
image = Image.open(io.BytesIO(postscript.encode("utf-8")))
|
||||
filepath = inputString("Dateipfad für das zu exportierende Bild eingeben. Das Bildformat wird über die Dateiendung bestimmt")
|
||||
try:
|
||||
image.save(filepath)
|
||||
print("Bild gespeichert")
|
||||
except ValueError:
|
||||
print("Fehler: unbekannte Dateiendung")
|
||||
except Exception as err:
|
||||
print(err)
|
||||
finally:
|
||||
file.close()
|
||||
turtleObject.screen.clear()
|
||||
backgroundColor = save.backgroundColor
|
||||
turtleObject.screen.bgcolor(save.backgroundColor)
|
||||
for drawingInfo in save.drawingInfos:
|
||||
drawing = drawer.Drawing(drawingInfo, drawer.newTurtle())
|
||||
drawer.drawScaled(drawing)
|
||||
case _:
|
||||
print("unbekannter Befehl")
|
||||
if inputValue != "d":
|
||||
|
||||
Reference in New Issue
Block a user