- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
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 partie, on va coder notre méthode que j'ai appelée reduceSize ou on pourrait aussi l'appeler reduceImage si vous voulez.Ça c'est juste le nom de la méthode qu'on va créer tout de suite et qu'on va remplir de code Python.
00:00:12 :Cette méthode, on va lui passer deux paramètres.Le premier, ça va être la taille, donc je vais mettre un paramètre size.Par défaut, je vais lui donner une valeur de 0.5, donc ça veut dire qu'on va diviser la taille par 2.
00:00:23 :Et je vais mettre un autre paramètre qui lui va être quality, qui va être égal par défaut à 75.Donc vous pouvez mettre les valeurs que vous voulez, c'est juste des valeurs que je mets ici par défaut.
00:00:33 :Donc la taille et la qualité que l'on va pouvoir spécifier quand on va appeler cette méthode reduceImage.Donc si on ne spécifie rien par défaut, on va diviser la taille par 2 et on va avoir une qualité de 75.
00:00:53 :Donc ce qu'on va faire ici, c'est déjà calculer la nouvelle largeur et la nouvelle hauteur de notre image.Donc pour ça, on va tout simplement utiliser les attributs width et height que l'on avait et on va les multiplier par la taille.
00:01:05 :Donc si on multiplie par 0.5, c'est comme si on divisait par 2.Donc ce qu'on va faire, c'est qu'on va faire une variable qu'on va appeler newWidth qui va être égale à self.width et on va multiplier ça par l'attribut size ici.
00:01:18 :Donc self.width x size.Alors ce que je vais faire, c'est également utiliser la fonction round qui va me permettre d'arrondir le résultat.Puisque pile n'aime pas vraiment les nombres décimaux quand on va donner la taille d'une image.
00:01:30 :Si on lui dit qu'on veut changer la taille pour la mettre à par exemple 500.43, il ne va pas être content.Donc avec la fonction round, on va permettre d'arrondir en fait ce résultat à la valeur supérieure.
00:01:43 :Donc plutôt que d'avoir 500.43, dans ce cas 6.43, on reviendrait à 500.Et si on avait 500.75, on arrondirait au niveau supérieur.Donc on aurait 501.
00:01:53 :On va faire pareil avec newHeight.Donc newHeight qui va être égal là encore à round de self.height qu'on va multiplier par la taille.Donc là multiplié par 0.5, on divise par 2.
00:02:05 :On va ensuite réduire notre image.Donc pour ça, on va utiliser la méthode resize.Donc sur notre image qu'on a récupéré dans l'attribut image ici, qu'on a ouvert dans notre méthode init,on va utiliser la méthode resize.
00:02:17 :Cette méthode, on va lui passer en premier argument la nouvelle taille de l'image.Donc on va la passer à l'intérieur d'un topo, puisque forcément on va avoir la largeur et la hauteur.
00:02:26 :Donc on va avoir comme premier élément du topo la nouvelle largeur, donc newHeight.Et comme deuxième élément, la nouvelle hauteur, donc newHeight.On va ensuite lui passer en deuxième argument quelque chose,donc une constante qui va nous permettre de spécifier que lors du changement de taille,on veut avoir quelque chose qui a de l'anti-aliasing.
00:02:46 :Puisque si on ne met pas ça, on va perdre en qualité quand on va réduire l'image.Donc pour ça, on va utiliser la constante qui est contenue dans la classe image,qui s'appelle anti-alias comme ceci, donc tout en majuscule.
00:02:58 :Donc ça, ça va permettre d'avoir une meilleure qualité quand on va réduire l'image.Et comme ça, ça va nous retourner une version de l'image qui va être moins grande.
00:03:06 :Et donc ça, il va falloir le récupérer là encore dans une image.Donc je vais remettre ça à l'intérieur de self.image.Donc je vais faire self.image égale à sa version d'elle-même,
00:03:16 :mais avec la nouvelle taille qu'on a spécifiée ici.Donc comme ça, on aura dans self.image la nouvelle image, et on va pouvoir ensuite la sauvegarder.
00:03:24 :Donc pour ça, on peut faire tout simplement self.image.save, donc save pour sauvegarder l'image.Et on va lui passer trois arguments.Donc le premier, ça va être là où on veut le sauvegarder.
00:03:34 :Donc ça, on l'avait récupéré dans reducedPath, qui est le chemin qu'on a calculé dans la méthode init.On va lui passer ensuite le format dans lequel on veut sauvegarder notre image.
00:03:43 :Donc là, on va considérer qu'on va enregistrer toutes les images au format JPEG.Donc je passe le mot JPEG ici, en chaîne de caractère,pour qu'on ait bien une sauvegarde qui se fasse dans ce format.
00:03:53 :Et pour finir, on va spécifier la qualité de l'image qu'on veut sauvegarder.Donc là, ça va être le paramètre quality qu'on a récupéré ici.Et je vais spécifier dans cette méthode que je veux envoyer ce paramètre qualityau paramètre quality de ma méthode save.
00:04:09 :Donc je vais mettre quality, donc ça c'est le nom du paramètre de ma méthode,et je vais lui dire que c'est égal.Donc dans ce cas-ci, à la même chose, puisque là on a mis quality,donc ça va être égal également à quality.
00:04:19 :Donc là, on a deux fois la même chose.Ici, en fait, après le égal, c'est vraiment le nom du paramètre ici.Si je mets, par exemple, l à la place, eh bien ici, il faudra envoyer l.
00:04:28 :Et quand on appelle notre méthode, il faudrait mettre l également ici.Quality, c'est vraiment le nom du paramètre auquel on veut envoyer cette valeur.Donc moi, je vais laisser quality, je vais revenir avec ça.
00:04:40 :Je voulais juste vous montrer, pour pas que vous soyez trop perturbés,que vraiment, le mot quality ici, c'est par rapport au paramètre,alors que ça, c'est le nom du paramètre qui est contenu dans la méthode save.
00:04:51 :Donc ça va nous permettre de sauvegarder cette image avec cette qualité.Donc pour l'instant, 75% de qualité au format JPEG, là où on l'a spécifié.
00:04:59 :Avant ça, on va faire, en fait, une petite vérificationpour s'assurer que le dossier dans lequel on veut sauvegarder l'image existe.Puisque si le dossier n'existe pas, on va avoir une erreur.
00:05:09 :Donc pour ça, on va vérifier avec le module OS si le dossier n'existe pas.Et s'il n'existe pas, eh bien on va le créer.Donc on va dire if not os.path.existe
00:05:19 :et on va lui passer le dossier parent.Donc le dossier parent, qu'est-ce que ça va être ?Ça va être le dossier parent de notre attribut self.reducedpath.
00:05:27 :Donc ça, on va le calculer à la ligne juste au-dessus.Donc on va dire parentdir, par exemple,est égal à os.path.dirname de notre attribut reducedpath.
00:05:37 :Donc là, c'est la même fonction, dirname ici, que celle qu'on avait utilisée,qui nous permet de récupérer le nom du dossier parent.Donc là, avec ce chemin de fichier, par exemple,on récupérait le nom du dossier sampleimages.
00:05:49 :Quand on a le dossier reducedpath,en fait, on va récupérer le nom du dossier reduced.Donc puisque reducedpath, ici,on concatène le nom du dossier avec le nom du folder,qui dans ce cas-ci est reduced.
00:06:01 :Donc le nombre de l'image réduit, ça va être quelque chose comme ceci.Et avec cette fonction dirname ici,on va récupérer, par exemple, toute cette information.
00:06:09 :Donc s'il n'existe pas,donc si ce parentdir n'existe pas, on va le créer.Donc on va déjà vérifier qu'il n'existe pas.Donc if not os.path.exist parentdir,
00:06:19 :eh bien, on va le créer.On va le créer avec la fonction makedir,qui là encore est contenue dans le module os.Donc qu'est-ce qu'on va créer ?
00:06:26 :On va créer parentdir ici.Donc c'est pour ça que j'ai fait une variable ici,puisqu'on l'utilise à deux endroits,à la fois quand on vérifie si le dossier existe,et s'il n'existe pas, eh bien on le crée.
00:06:36 :Donc on a ici deux fois l'utilisation de parentdir.Donc c'est pour ça que, pour ne pas répéter de code,j'ai fait une variable intermédiaire.Sinon, on aurait très bien pu prendre ça directementet le mettre ici, à l'intérieur de cette structure conditionnelleet à l'intérieur de os.makedir,
00:06:50 :mais vous voyez qu'on commence à répéter du code.Donc moi, je préfère faire une ligne intermédiaire ici.Donc ça, c'est juste une vérification pour s'assurer,comme je vous disais, que le dossier existe bien,pour qu'on puisse, par la suite,sauvegarder notre image à l'intérieur.
00:07:02 :Et ce qu'on va retourner à la fin de notre méthode ici,ça va être un booléen qui va nous indiquersi la conversion a réussi.
00:07:08 :Donc ce qu'on va faire, là encore, c'est juste vérifiersi l'image qu'on a sauvegardéeexiste sur le disque ou non.Donc si elle n'existe pas, ça veut dire qu'il y a eu un problème.
00:07:16 :Alors on ne va pas renseigner le problème en tant que tel,puisqu'il peut y avoir beaucoup de raisonspour lesquelles ça ne fonctionne pas.Mais on va juste vérifier si l'image existe ou pas.
00:07:24 :Donc si l'image existe dans le dossier reduced,ça veut dire que ça a marché.Et sinon, ça veut dire qu'il y a eu un problème quelconque.
00:07:30 :Donc on va retourneros.pat.existeet on va vérifier si reduced pat existe.Donc ça, c'est le cheminvers mon image réduite.Et là encore, on utilise os.pat.existe
00:07:42 :pour vérifier si cette image existe.Donc si elle existe, ça va retourner true.Donc ça nous indiquera que l'image a bien été convertie.Et si elle n'existe pas, on aura false.
00:07:50 :Et donc on saura qu'il y a une erreur.Ça, on va pouvoir le répercuterdans l'interface graphique. Vous vous souvenez,on avait une petite croix qui indiquaitque l'image n'avait pas été convertieet une petite marque verte dans un cerclepour nous indiquer que la conversion a réussi.
00:08:04 :Donc si jamais la conversion ne réussit pas,on va laisser la croix rouge et si ça fonctionne,si on a true ici qui nous est retourné,on va mettre la petite coche vertepour nous indiquer que ça a fonctionné.
00:08:14 :Donc voilà pour l'image.On va pouvoir tout de suite tester notre APIen utilisant notre méthode icidans la fonction main. Donc je vais juste
00:08:22 :réduire PyCharm et on va voirà côté avec notre findersi la conversion se passe correctement.Donc dans mon finder ici, j'ai l'imagequi est une image de mon chat quand il étaittout petit. Donc attention, c'est très très mignon.
00:08:34 :Donc en fait,cette image, on va essayer de la convertir.Donc je vais lancer mon script, je vais faireun clic droit, run file in pythonconsole. On va attendre un petit peu
00:08:44 :et une fois que c'est terminé, on va revenir iciet vous voyez qu'on a bien le dossier reduce donkeyqui a été créé puisqu'il n'existait pasmais grâce à cette structure conditionnelle dans laquelleon vérifie si le dossier existe ou non,on a pu le créer puisque dans ce cas-ci,
00:08:56 :il n'existait pas. Si le dossier existaitdéjà au préalable, on ne passait tout simplementpas dans cette structure conditionnelleet on ne faisait rien puisque le dossier existaitdéjà. Donc là, on retrouve
00:09:06 :notre image réduite. On voit bien que la tailleest presque divisée par 10 et sije relance un plus vieux, on voit qu'au niveau de la qualité,ça n'a pas vraiment changé grand chose.
00:09:14 :Quand on reste dans des niveaux comme çaà 75%, c'est assez peu visible.Si on descendait la qualité ici pour la mettrepar exemple à 10 ou 20%, là on verraitvraiment une image qui seraitun peu plus détériorée. Donc le poids serait encore
00:09:26 :plus faible. On aurait peut-êtreune image de 100 ou 200 kilos mais la qualitélà serait vraiment moins bonne.Donc ça fonctionne, on a bien notre image qui estcréée, qui est sauvegardée sur le disquegrâce à cette méthode Reduce. Donc c'est tout
00:09:38 :ce qu'on avait besoin de faire au niveau de l'API.Vous voyez que même sans passer pour l'instant parune interface graphique, on est capablede convertir une image pour changersa taille et sa qualité sansavoir besoin là encore de boutonsou de listes ou quoi que ce soit. Donc ça c'est la partie
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.