Paint Application est une application de dessin simple développée en Python à l'aide de la bibliothèque Tkinter.
- Nouvelle image : Cliquez sur
File -> Newpour créer une nouvelle image avec des dimensions spécifiques. - Charger une image : Utilisez
File -> Loadpour charger une image à partir de votre système de fichiers. - Sauvegarder une image : Utilisez
File -> Saveou le raccourci clavierCtrl+Spour sauvegarder l'image actuelle sous le même nom, si elle a été ouverte ou déjà enregistrée. - Outils de dessin : Sélectionnez l'outil de dessin (
Quillpour le pinceau ou la gomme,Paint canpour le remplissage) à partir de la barre d'outils. - Sélection de couleur : Choix de la couleur de dessin à l'aide d'une palette de couleurs.
- Réinitialisation du tableau : Utilisez
Edit -> Clearpour obtenir un tableau de nouveau vierge - Undo/Redo : Utilisez
Edit -> UndoetEdit -> Redoou les raccourcis clavierCtrl+ZetCtrl+Ypour annuler et rétablir les actions de dessin. - Convert into ASCII art : Accessible via
Edit -> Convert into ASCII artpour convertir une l'image actuelle ou une image de votre répertoir en ASCII art, sauvegardable ou copiable dans votre presse papier.
-
Capture d'écran :
-
Vidéo de présentation :
https://drive.google.com/file/d/1B7pXEvLP0t-VG7gDRf5i6WwZJooNRoBT/view?usp=drive_link
Pour exécuter l'application localement, vous aurez besoin des dépendances suivantes installées sur votre machine :
- Numpy
- Pillow (PIL)
- cv2 (opencv)
-
Clonez le dépôt :
git clone https://github.com/votre-utilisateur/paint-application.git cd paint-application -
Installez les dépendances
pip install -r requirements.txt
-
Exécutez le fichier principal
python Painthon GUI.py
| Hugo | Sylvain | Marine | Trung | Khai |
|---|---|---|---|---|
| 20 % | 25 % | 15 % | 20 % | 20 % |
-
Outil remplissage :
L'outil de remplissage utilise une version spécialisée de l'algorithme "flood fill". Cet algorithme remplace une couleur spécifique sur le canevas par une autre couleur choisie par l'utilisateur. Lorsqu'on clique sur une zone du canevas avec l'outil de remplissage activé, l'algorithme détecte la couleur de la zone cliquée et remplace cette couleur, ainsi que toutes les zones adjacentes de la même couleur, par la nouvelle couleur sélectionnée. Ce processus se poursuit jusqu'à ce que toutes les zones connectées de la couleur d'origine soient remplies.
-
Conversion en ASCII :
La conversion en ASCII permet de transformer des images en art ASCII, un processus qui consiste à représenter une image à l'aide de caractères ASCII au lieu de pixels. Pour ce faire, nous avons récupéré une liste de 93 caractères sur Internet, classée selon l’intensité lumineuse croissante de chaque caractère. Liste disponible sur : https://stackoverflow.com/questions/30097953/ascii-art-sorting-an-array-of-ascii-characters-by-brightness-levels-c-c
La conversion des pixels en caractères ASCII est basée sur l'intensité lumineuse des pixels. Chaque pixel de l'image redimensionnée est parcouru, et son intensité moyenne est calculée - ici, il s’agit de la moyenne des 3 valeurs R, G, B. Cette intensité moyenne est ensuite comparée avec les caractères dans la liste de caractères ASCII, et le caractère ayant l’intensité lumineuse la plus proche de l’intensité moyenne est choisi pour représenter le pixel. Le caractère correspondant est ajouté à une chaîne de caractères représentant la ligne courante de l'image en ASCII. Cette chaîne de caractères est ensuite enregistrée dans un fichier texte créé.
Pour afficher ce fichier texte dans un canevas, nous avons d’abord construit un nouveau type de canevas dit "zoomable". Cela a pour but de s'adapter à la taille de l'image, qui est grande en comparaison avec la taille de l’écran d’ordinateur. Sinon, l’utilisateur peut également choisir de réduire la taille de leur image avant de la convertir en art ASCII. L’affichage du texte sur le canevas se fait par une boucle qui lit chaque caractère de chaque ligne et colonne dans le fichier texte. Pour la clarté de l'image "ASCII", un espacement de 10 pixels entre les caractères est défini durant l'affichage.
-
Undo & Redo :
En général, les applications de dessin comme Paint utilisent le modèle de commande pour implémenter les fonctionnalités d’annulation (Undo) et de rétablissement (Redo):
- Chaque action que vous effectuez dans l’application (comme dessiner une ligne ou remplir une zone avec de la couleur) est encapsulée dans un objet de commande. Cet objet de commande contient toutes les informations nécessaires pour effectuer l’action (par exemple, le type de forme, les coordonnées de début et de fin, la couleur, etc.) et pour l’annuler et chaque fois que vous effectuez une action, l’objet de commande correspondant est ajouté à une pile de commandes.
- Annuler (Undo) : Lorsque vous cliquez sur le bouton “Undo”, l’application retire la dernière commande de la pile et annule l’action correspondante. Cela est généralement réalisé en appelant une méthode undo() sur l’objet de commande, qui sait comment annuler l’action spécifique.
- Rétablir (Redo) : Si vous avez annulé une action et que vous voulez la rétablir, l’application peut simplement réexécuter la commande correspondante. Cela est généralement réalisé en appelant une méthode redo() sur l’objet de commande.
Les contributions sont les bienvenues ! Si vous souhaitez améliorer l'application Paint, veuillez ouvrir une issue pour discuter des changements proposés.
