⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette première partie sur l'API de notre application, on va créer une classe qui va nouspermettre de gérer les images. Donc dans mon dossier package ici, j'ai ouvert le projet en
00:00:10 :passant dans PyCharm, donc là encore la même chose, j'ai tout copié depuis notre projetwarmup. Donc dans le dossier package ici, je vais créer un fichier que je vais appeler tout
00:00:19 :simplement image, donc un fichier Python qui va s'appeler image.py. A l'intérieur de ce fichier,je vais importer depuis la librairie Peel la classe image. Donc on va dire from Peel, donc
00:00:31 :Peel c'est la librairie Pillow qu'on a installée dans la partie précédente, comme je vous disaisau niveau du code, le nom de la librairie ça va être Peel comme ça en majuscule, donc P-I-L,et on va importer depuis cette librairie la classe image. On va également importer juste avant le
00:00:46 :module OS, donc on va faire un import de OS, et là encore pep8, je sépare les imports, donc enpremier la librairie standard, et ensuite les librairies qu'on a rajoutées par la suite,puisque Peel ne fait pas partie de la librairie standard. On va ensuite créer une classe qui va
00:01:01 :représenter notre image, alors je vais l'appeler custom image comme ceci, on peut l'appelerautrement, mais il faut juste faire attention de ne pas l'appeler image, puisque image c'est déjà lenom de la classe qu'on a importé depuis Peel, donc pour ne pas avoir un problème avec les deuxnoms, on va mettre quelque chose de différent. Donc moi je vais mettre custom image comme ceci,
00:01:18 :et on va faire bien entendu une méthode init, comme tout le temps quand on fait une classe.Pour l'instant je vais mettre pass à l'intérieur, et pour faire nos petits tests on va rajouter unmain ici avec la structure conditionnelle, et je vais créer une instance de ma classe,
00:01:32 :donc custom image comme ceci, que je vais récupérer dans une variable que j'appellei. Donc on a tout le setup qui est prêt pour créer notre classe, on a notre classe avec la
00:01:42 :méthode init, et on crée une instance de notre classe à l'intérieur de cette structureconditionnelle. Donc là je pourrais lancer mon script, si je fais un clic droit et que je clique
00:01:49 :sur run file in python console, pour l'instant il ne se passe rien, mais j'ai bien mon instance quiest créée ici quand je regarde à droite dans mes variables. Donc ce qu'on va faire c'est, à
00:01:59 :l'intérieur de cette classe custom image, on va créer une image à partir de Peel. Alors idéalementon préférerait en fait hériter de cette classe image dans notre classe custom image ici, malheureusementavec Peel c'est quelque chose de connu, on ne peut pas hériter de la classe image, sinon vous avez
00:02:16 :une erreur, donc si vous essayez, si ici vous mettez image et que vous essayez après de toutsimplement ouvrir une image en se faisant self.open, ça ne marchera pas. Donc on ne peut pas hériter de
00:02:26 :l'image, donc ce qu'on va faire à la place c'est tout simplement créer ici une variable qui vaappartenir à ma classe, que je vais appeler self.image, et qui va être égale donc à mon image
00:02:35 :que je vais ouvrir. Donc on va utiliser la classe image de Peel pour ouvrir une image, et on vaouvrir une image qu'on va passer dans un attribut ici, qui va s'appeler pat, donc l'attribut il vafalloir le passer en mettant un paramètre dans la méthode init, donc je vais l'appeler pat ici,
00:02:50 :et je vais le donner en dessous à ma classe image ici avec la méthode open. Donc comme ça quand onva créer une instance ici, on va lui donner un chemin, donc pour l'instant je vais juste mettrele chemin d'une image, qui est dans un dossier que j'ai appelé simple images ici, et vous avez
00:03:06 :par exemple cette image que l'on peut utiliser. Alors je vais juste minimiser ça pour qu'on yvoit un peu plus clair. Donc ça ça va être récupéré directement dans pat ici, donc dans le
00:03:15 :paramètre pat, on va lui envoyer en argument ce chemin de fichier qu'on va récupérer ensuite dansla méthode open, qui va nous permettre d'ouvrir l'image. Donc l'image on va la récupérer ensuite
00:03:25 :dans cet attribut self.image de ma classe. On va récupérer ensuite la taille de notre image,donc la taille en largeur et en hauteur, pour pouvoir quand on va faire la méthode dans laprochaine partie qui va nous permettre de réduire la taille de l'image, et bien partir de cette taille
00:03:40 :de base pour pouvoir ensuite la diviser par exemple par deux pour avoir la nouvelle taille de notreimage. Donc pour ça il nous faut déjà la taille de l'image originale, donc si je vais faire ça sur
00:03:49 :une seule ligne, je vais faire une assignation comme ça parallèle en faisant self.width virguleself.height, et je vais dire que c'est égal à self.image.size. Donc self.image ici c'est notre
00:04:01 :image, et on va récupérer la taille avec l'attribut size ici, donc ça ça va nous retourner en faitun topol, et donc ce topol on va le récupérer dans ces deux variables self.width et self.height.
00:04:11 :Donc pour l'instant je peux tester ça, alors je vais même pas te faire de print en fait,puisqu'on va tout simplement lancer notre script là encore en faisant un clic droit et en cliquantsur run file in python console, et ça va lancer notre script, et on va retrouver ici donc à droite
00:04:26 :on a notre image, donc l'image pile avec tout un tas d'attributs ici que vous pouvez regarder. Onva notamment retrouver ici vous voyez la taille de notre image donc en width, et si on va dansles haches ici on va voir le height, donc c'est ça exactement qu'on a récupéré dans nos deux
00:04:41 :attributs height et width qui eux appartiennent à notre classe custom image. Donc comme ça on ala taille en largeur et en hauteur, et comme je vous disais dans la prochaine partie on va pouvoirutiliser ces deux variables pour les diviser par le nombre qu'on va entrer dans l'interface graphique
00:04:56 :pour avoir la nouvelle taille de l'image. On va récupérer aussi le chemin dans une variable qu'onva appeler path, donc self.path qui va être égal au chemin qu'on envoie quand on crée l'instance
00:05:05 :de notre classe. Pour finir cette méthode init on va créer également un attribut qui va s'appelerreduced path qui va être le chemin vers lequel le chemin de l'image en fait qui va être converti.
00:05:17 :Donc pour ça on va utiliser un chemin de dossier, par défaut si vous vous rappelez dans l'interfacej'avais mis reduced, donc dans l'interface on pouvait entrer un chemin de dossier dans lequelallait se retrouver l'image. Donc ça je vais le récupérer également dans ma méthode init,
00:05:30 :je vais créer un paramètre que je vais appeler folder et par défaut je vais le mettre égal àreduced comme ça il aura une valeur par défaut et même si on ne dit rien l'image se retrouveradonc dans le même dossier dans lequel elle est mais dans un sous dossier reduced. Donc là par
00:05:44 :exemple avec cette image si je lance la conversion elle se retrouverait donc dans user, tbash,pictures, simple images et on aurait un dossier reduced dans lequel se trouverait mon image.
00:05:54 :L'image réduit on va garder exactement le même nom de fichier donc ça ne changera pas c'estjuste qu'on va la mettre dans un sous dossier. Donc pour calculer ce chemin ici on va utiliser
00:06:02 :notamment le module os, donc déjà on va utiliser la fonction join qui va nous permettre de joindredifférents morceaux de fichiers ensemble, on va déjà récupérer le nom du dossier de l'image donclà on a ce chemin ici on veut récupérer le nom du dossier donc le nom du dossier ici on veut
00:06:19 :s'arrêter à simple images. Donc pour ça on va utiliser la fonction dire name qui est contenuedans os.path également donc os.path.direname et on va lui donner le chemin donc self.path ça
00:06:29 :ça va nous retourner comme je vous disais cette partie du chemin ensuite on va vouloir concaténertout ça avec le dossier qu'on va lui passer ici donc folder donc on va lui donner la variablefolder ici donc qui va dans ce cas ci être égal à reused et pour finir on va lui passer os.path.basename
00:06:47 :cette fois ci qui elle va nous permettre de récupérer le nom du fichier. Donc dire nameça permet de récupérer le nom du dossier de notre chemin ici et basename ça nous permet derécupérer juste cette partie ici le nom du fichier. On lui passe également self.path et donc comme ça
00:07:04 :on va concaténer le nom du dossier ici avec le nom du folder donc qui va être reused et le nomdu fichier. Donc si vous voulez c'est un peu comme si ici entre le nom du dossier et le nom du fichier
00:07:15 :on insérait le nom de folder ici donc qui pour l'instant est égal à reused mais avec l'interfaceon pourrait le modifier donc c'est comme si on mettait ça ici reused entre les deux. Donc c'est
00:07:25 :ça qu'on fait précisément à cette ligne avec la fonction os.path.join et dire name et basename.Donc on va relancer le script pour vérifier que ça fonctionne bien et vous allez voir si on regardeà droite ici si on regarde notre attribut reused path on a bien le chemin donc user tbash pictures
00:07:42 :sample images avec le nom du dossier reused qui a bien été inséré ici donc on voit la différenceentre le chemin ici d'origine et le chemin réduit avec également la largeur d'origine et la hauteurd'origine. Donc voilà pour la méthode init, voilà pour notre classe de base et dans la prochaine