Neu in meinem Wiki: generativepy
Regelmäßige Leser des Schockwellenreiters wissen, daß ich ein Faible für Drawbot besitze, einer Python-App für zweidimensionale Graphiken, deren Vorzug es ist, daß sie eher auf Vektor- denn auf Bitmap-Graphiken fokussiert ist und mit ihr daher leicht auflösungsunabhängige Graphiken zum Beispiel für Printerzeugnisse geschaffen werden können. Daher wäre sie ein ideales (und geiles) Werkzeug für mein Projekt »Generative Art zwischen zwei Pappedeckel«, mit dem ich dem NFT-Hype den Stinkefinger zeigen möchte. Ihr Nachteil ist aber, daß sie nur unter macOS läuft und ich möchte einfach nicht schon wieder in die Mac-Only-Falle tapsen.
Jetzt ist mir aber vor wenigen Tagen generativepy untergekommen, eine kostenlose, freie (MIT-Lizenz) Open-Source-Bibliothek von Martin McBride zum Erstellen von Diagrammen, Bildern und Animationen in Python. Bei ihr liegt ähnlich wie bei Drawbot der Schwerpunkt auf die Erzeugung von Vektorgraphiken (sie kann aber – wie Drawbot auch – Bitmaps; und auch Animationen erzeugt sie ähnlich wie Drawbot als eine Folge von Einzeldateien). Die Installation ist wegen einiger Abhängigkeiten, die von pip
oder conda
nicht aufgelöst werden (können), nicht unbedingt trivial, aber auch Anfänger sollten sie anhand der Anleitung schaffen. (Vorsicht: Ich habe pycairo
nicht innerhalb von Thonny installiert bekommen, irgendetwas stimmt mit dem wheel
-Modul dort nicht, aber mein Anaconda-Python installierte Cairo ohne zu murren.)
Die anderem »minimalen« Anforderungen (Numpy und Pillow) hatte ich sowieso schon installiert und dvipng
ist Bestandteil meiner MacTeX-Installation, so daß einem ersten Test (siehe Screenshot) nichts im Wege stand.
Auch wenn ich damit bisher nur an der Oberfläche gekratzt habe, das Teil scheint Potential zu haben. Daher habe ich ihm eine Seite in meinem Wiki spendiert:
Literatur und Tutorials
- GraphicMaths, Martin McBrides begleitende Website zum GraphicMaths YouTube-Kanal. Die Illustrationen und Animationen dort werden in der Hauptsache mit generativepy erstellt.
- Martin McBride: Generative Art @ PythonInformer
- Martin McBride: The generativepy Book (WiP)
- Martin McBrides Blog
Links
- generativepy Home
- generativepy @ GitHub
- generativepy @ PyPI
- generativepy Reference
- generativepy Tutorial
Und als ersten Versuch habe ich dieses kleine Skriptchen zum Laufen bekommen:
from generativepy.drawing import make_image, setup
from generativepy.color import Color
from generativepy.geometry import Rectangle
import os
file_path = os.path.dirname(os.path.abspath(__file__))
image_folder = os.path.join(file_path, "images")
def draw(ctx, pixel_width, pixel_height, frame_no, frame_count):
setup(ctx, pixel_width, pixel_height, background=Color(0.92))
color0 = Color(0.18, 0.20, 0.22)
Rectangle(ctx).of_corner_size((50, 150), 300, 50).fill(color0)
color1 = Color(0.77, 0.47, 0.22, 0.7)
Rectangle(ctx).of_corner_size((100, 50), 50, 200).fill(color1)
color2 = Color(0.45, 0.69, 0.91, 0.7)
Rectangle(ctx).of_corner_size((170, 70), 50, 200).fill(color2)
color3 = Color(0.94, 0.29, 0.17, 0.7)
Rectangle(ctx).of_corner_size((240, 90), 50, 200).fill(color3)
make_image(os.path.join(image_folder, "rectangle.png"), draw, 500, 400)
print("I did it, Babe!")
Das Skript ist noch ein wenig trivial, man kann aber dennoch schon erahnen, was mit dieser Bibliothek alles möglich sein könnte. Still digging!