@Fire Spike: Kritik am Skript: Code auf Modulebene — nicht gut.
Die Farben stehen 2× in der Liste. Es ist weniger fehleranfällig und offensichtlicher das die da zweimal stehen, wenn man sie nur einmal schreibt und die Liste dann mit 2 ”multipliziert”.
`a` ist ein sehr ungewöhnlicher und damit kein guter Name für einen Laufindex. `i` ist *der* Name für so etwas.
`t` ist auch kein guter Name. Wer kommt denn bitte bei dem Namen `t` darauf das sich dahinter ein `Pen`-Objekt verbirgt?
`canvas` ist kein guter Name wenn es sich gar nicht um einen `Canvas` handelt. Darum sieht auch das `canvas.getcanvas()` komisch/falsch aus.
Für Pfad/Dateinamenoperationen würde ich `pathlib` verwenden. Dein `os.remove()` dürfte auch nicht funktionieren weil bei Deinem `filename` die Dateinamenserweiterung fehlt.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import random
import turtle
from itertools import cycle
from pathlib import Path
from PIL import Image
IMAGE_PATH = Path("/media/usb/Bilder")
def main():
Image.MAX_IMAGE_PIXELS = None
colors = 2 * ["green", "blue", "magenta", "purple", "yellow"]
for i in range(20):
turtle.tracer(0, 0)
pen = turtle.Pen()
pen.hideturtle()
pen.speed(0)
turtle.bgcolor("black")
for x, color in zip(range(360), cycle(random.sample(colors, k=6))):
pen.pencolor(color)
pen.width(x / 100 + 1)
pen.forward(x)
pen.left(59)
turtle.update()
filename = IMAGE_PATH / f"Icon{i}.eps"
pen.getscreen().getcanvas().postscript(
file=filename, colormode="color"
)
image = Image.open(filename)
image.load(scale=20)
image.save(filename.with_suffix(".png"))
filename.unlink()
pen.clear()
if __name__ == "__main__":
main()
Zum Problem mit der Transparenz: Es gibt im EPS keine Transparenz. Es gibt Software die kann das über Umwege, aber da müssen dass dann auch beide Seiten unterstützen — die Software die es schreibt und die die es liest. Weder Tk noch PIL können/machen das.
Man könnte mit PIL die weissen Pixel transparent machen. Also entsprechend eine Maske daraus generieren und mit `putalpha()` setzen.
Oder man benutzt nicht Tk zum schreiben sondern generiert gleich eine Vektorgrafik die Transparenz beherrscht, beispielsweise SVG. Dann kann man sich vielleicht auch die Umwandlung in PNG sparen und gleich die SVG-Datei weiterverwenden.