export as image
This commit is contained in:
@ -3,6 +3,8 @@ import turtle
|
|||||||
import lSystems
|
import lSystems
|
||||||
import pickle
|
import pickle
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from PIL import Image
|
||||||
|
import io
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Save:
|
class Save:
|
||||||
@ -76,7 +78,8 @@ l: ein Lindenmayer-System löschen
|
|||||||
b: Hintergrundfarbe ändern
|
b: Hintergrundfarbe ändern
|
||||||
q: Programm beenden
|
q: Programm beenden
|
||||||
s: Lindenmayer-Systeme speichern
|
s: Lindenmayer-Systeme speichern
|
||||||
r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen
|
||||||
|
e: als Bilddatei exportieren""")
|
||||||
case "d":
|
case "d":
|
||||||
for i, lSystem in enumerate(lSystems.LSystems):
|
for i, lSystem in enumerate(lSystems.LSystems):
|
||||||
print(f"{i}: {lSystem.name}")
|
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():
|
match input("Möchtest du das das Lindenmayer-System das ganze Fenster ausfüllt? [J/n]: ").lower():
|
||||||
case "j"|"":
|
case "j"|"":
|
||||||
inputError = False
|
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)
|
takeInput(turtleObject)
|
||||||
case "n":
|
case "n":
|
||||||
inputError = False
|
inputError = False
|
||||||
@ -128,20 +131,15 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
|||||||
try:
|
try:
|
||||||
file = open(filepath, "wb")
|
file = open(filepath, "wb")
|
||||||
pickle.dump(save, file)
|
pickle.dump(save, file)
|
||||||
|
file.close()
|
||||||
print("erfolgreich gespeichert")
|
print("erfolgreich gespeichert")
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print(err)
|
print(err)
|
||||||
finally:
|
|
||||||
file.close()
|
|
||||||
case "r":
|
case "r":
|
||||||
filepath = inputString("Datei, die geladen werden soll eingeben")
|
filepath = inputString("Datei, die geladen werden soll eingeben")
|
||||||
save: Save
|
|
||||||
try:
|
try:
|
||||||
file = open(filepath, "rb")
|
file = open(filepath, "rb")
|
||||||
save = pickle.load(file)
|
save = pickle.load(file)
|
||||||
except Exception as err:
|
|
||||||
print(err)
|
|
||||||
finally:
|
|
||||||
file.close()
|
file.close()
|
||||||
turtleObject.screen.clear()
|
turtleObject.screen.clear()
|
||||||
backgroundColor = save.backgroundColor
|
backgroundColor = save.backgroundColor
|
||||||
@ -149,6 +147,21 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""")
|
|||||||
for drawingInfo in save.drawingInfos:
|
for drawingInfo in save.drawingInfos:
|
||||||
drawing = drawer.Drawing(drawingInfo, drawer.newTurtle())
|
drawing = drawer.Drawing(drawingInfo, drawer.newTurtle())
|
||||||
drawer.drawScaled(drawing)
|
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)
|
||||||
case _:
|
case _:
|
||||||
print("unbekannter Befehl")
|
print("unbekannter Befehl")
|
||||||
if inputValue != "d":
|
if inputValue != "d":
|
||||||
|
|||||||
Reference in New Issue
Block a user