export as image

This commit is contained in:
2022-01-06 21:38:47 +01:00
parent 5087df5bdd
commit 743c0306da
2 changed files with 36 additions and 13 deletions

View File

@ -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":

10
setup.py Normal file
View File

@ -0,0 +1,10 @@
from setuptools import setup, find_packages
setup(
name='lindenmayer',
version='0.1.0',
packages=find_packages(include=['lindenmayer']),
install_requires=[
"pillow",
],
)