Récemment, mon enfant a voulu faire un coloriage pour un personnage de son dessin animé préféré. La solution évidente était d'utiliser une sorte d'éditeur graphique pour Linux (parce que je suis un utilisateur Linux), mais je me suis ensuite souvenu que j'étais une personne paresseuse.
Heureusement, je connais Python et JupyterLab. Voyons comment Jupyter facilite la tâche.
Tout d'abord, nous aurons bien sûr besoin d'une version moderne de Python (si vous êtes un utilisateur de macOS, vous pouvez suivre ce tutoriel ). Ensuite, vous devez installer et ouvrir JupyterLab et Pillow - un fork de la bibliothèque d'imagerie Python (PIL):
$ python -V
Python 3.8.5
$ pip install jupyterlab pillow
……………………..
$ jupyter lab
Dans ce cas, nous voulons peindre avec un cerf. Commençons par télécharger l'image et l'enregistrer localement. Il est préférable d'utiliser des images de Creative Commons ou d'autres licences open source afin de ne pas vous soucier des droits d'auteur. Dans cet exemple, j'ai utilisé une image open source d' Unsplash et l'ai nommée deer.jpg.
Commençons par importer:
from PIL import Image
Ouvrons l'image et vérifions sa taille:
pic = Image.open("deer.jpg")
pic.size
(3561, 5342)
C’est peut-être un peu trop pour notre tâche. Ces images haute résolution conviennent aux livres, pas aux pages à colorier. Réduisez la taille de l'image:
x, y = pic.size
x //= 10
y //= 10
smaller = pic.resize((x, y))
La taille est devenue 10 fois plus petite.
smaller
À la perfection. Passer à autre chose.
Ce cerf devrait être une proie facile pour l'algorithme de détection des limites. Nous devons nettoyer l'image pour faciliter la coloration. Et, heureusement, il existe un algorithme prêt à l'emploi pour cela aussi:
from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)
edges
C'est probablement l'étape la plus importante. Nous supprimerons tous les détails superflus et laisserons des lignes claires. La couleur est un peu étrange, mais ce problème n'est pas difficile à résoudre. Divisez l'image en bandes de couleur et sélectionnez celle avec les lignes les plus claires:
bands = edges.split()
bands[0]
Maintenant, les lignes sont claires, mais la palette elle-même n'est pas encore adaptée à l'impression, car votre imprimante va manquer d'encre et votre enfant n'aimera pas peindre une image sur un fond noir. Nous inversons donc les couleurs. Définissez les seuils pour x sur max-black et max-white pour rendre les lignes encore plus distinctes:
outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline
Maintenant, faisons attention qu'il reste beaucoup d'espace vide dans l'image, alors recadrons-la:
outline.crop((10, 200, 300, 400))
Eh bien voilà tout. Sauvegardons l'image au format PDF (pour l'impression):
outline.save("deer.pdf")
C'est ainsi que vous pouvez facilement créer vos propres pages à colorier pour vos enfants: routine minimale, programmation maximale!
La publicité
Les serveurs Epic sont des VPS Linux ou Windows avec de puissants processeurs AMD EPYC et des disques Intel NVMe très rapides. Dispersez-vous comme des petits pains!