Vor kurzem wollte mein Kind eine Figur für eine Figur aus seinem Lieblings-Cartoon machen. Die offensichtliche Lösung bestand darin, eine Art Grafikeditor für Linux zu verwenden (weil ich ein Linux-Benutzer bin), aber dann erinnerte ich mich, dass ich eine faule Person bin.
Zum Glück kenne ich Python und JupyterLab. Mal sehen, wie Jupyter die Aufgabe erleichtert.
Zunächst benötigen wir natürlich eine moderne Version von Python (wenn Sie ein MacOS-Benutzer sind, können Sie diesem Tutorial folgen ). Dann müssen Sie JupyterLab und Pillow installieren und öffnen - eine Abzweigung der Python Imaging Library (PIL):
$ python -V
Python 3.8.5
$ pip install jupyterlab pillow
……………………..
$ jupyter lab
In diesem Fall wollen wir mit dem Bild eines Hirsches malen. Laden Sie zunächst das Bild herunter und speichern Sie es lokal. Verwenden Sie am besten Bilder aus Creative Commons oder anderen Open Source-Lizenzen, damit Sie sich nicht um das Urheberrecht kümmern. In diesem Beispiel habe ich ein Open Source-Image von Unsplash verwendet und es Deer.jpg genannt.
Beginnen wir mit dem Import:
from PIL import Image
Öffnen wir das Bild und überprüfen seine Größe:
pic = Image.open("deer.jpg")
pic.size
(3561, 5342)
Das ist vielleicht etwas zu viel für unsere Aufgabe. Diese hochauflösenden Bilder eignen sich gut für Bücher, nicht für Malvorlagen. Reduzieren Sie die Bildgröße:
x, y = pic.size
x //= 10
y //= 10
smaller = pic.resize((x, y))
Die Größe ist zehnmal kleiner geworden.
smaller
Perfekt. Weitermachen.
Dieses Reh sollte eine leichte Beute für den Grenzerkennungsalgorithmus sein. Wir müssen das Bild bereinigen, um das Färben zu vereinfachen. Und zum Glück gibt es auch dafür einen vorgefertigten Algorithmus:
from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)
edges
Dies ist wahrscheinlich der wichtigste Schritt. Wir werden alle überflüssigen Details entfernen und klare Linien hinterlassen. Die Farbe ist etwas seltsam, aber dieses Problem ist nicht schwer zu lösen. Teilen Sie das Bild in Farbstreifen und wählen Sie den mit den klarsten Linien aus:
bands = edges.split()
bands[0]
Jetzt sind die Linien klar, aber die Palette selbst ist noch nicht zum Drucken geeignet, da Ihrem Drucker die Tinte ausgeht und Ihr Kind kein Bild auf einem schwarzen Hintergrund malen möchte. Also kehren wir die Farben um. Stellen Sie die Schwellenwerte für x auf max-schwarz und max-weiß ein, um die Linien noch deutlicher zu machen:
outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline
Lassen Sie uns nun darauf achten, dass auf dem Bild noch viel Platz frei ist. Schneiden wir ihn also zu:
outline.crop((10, 200, 300, 400))
Nun, das ist alles. Speichern wir das Bild im PDF-Format (zum Drucken):
outline.save("deer.pdf")
So können Sie ganz einfach Ihre eigenen Malvorlagen für Ihre Kinder erstellen: minimale Routine, maximale Programmierung!
Werbung
Epische Server sind Linux- oder Windows-VPS mit leistungsstarken AMD EPYC-Prozessoren und sehr schnellen Intel NVMe-Laufwerken. Zerstreuen wie heiße Kuchen!
