Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3216
| From | Pierre Maurette <maurette.pierre@free.fr> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: manipulation d'image |
| Date | 2019-08-14 20:35 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <mn.74d37e38ae0c412e.79899@free.fr> (permalink) |
| References | <slrnql8asb.1ca.lulu042@Minty.Rock-n-Roll.org> |
Lulu :
> Bonjour,
>
> Je veux faire quelque chose qui me paraît simple, mais je m'arrache les
> cheveux depuis plusieurs heures parce que des fonctions python sont
> indisponibles ou causent des erreurs.
>
> Je veux ouvrir une image PNG en RGB, créer une nouvelle image de la même
> taille, lire la valeur RGB de l'image originale (getpixel), modifier la
> valeur du pixel (niveaux de gris, noir et blanc, négatif, etc.) et
> écrire le nouveau pixel (putpixel) dans l'image créée en mémoire avant
> de l'afficher.
>
> Évidemment, comme j'apprends "sur le tas" (PDF imprimé, exemples péchés
> sur le web), je dois commettre des erreurs grossières : merci de
> m'indiquer lesquelles.
>
> Voilà mon code:
> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
> #!/usr/bin/python3
> # -*- coding: utf-8 -*-
>
> #import sys
> from PIL.Image import *
> #from PIL import Image
> #from PIL import *
> #import PIL
> #import PIL.Image
>
> Fichier_Image="Les_Horribles_Cernettes.png"
> #Fichier_Image="avengers-endseries-comics-png-475.png"
>
> #try:
> the_image=open(Fichier_Image).convert("RGB")
> #except:
> #print("Erreur : le fichier ",Fichier_Image," exsite-t-il ?"
> #sys.exit(1)
>
> Image.show(the_image)
>
> # l = largeur en pixel de l'image
> # h = hauteur en pixel de l'image
> (l, h) = the_image.size
> print("taille de l'image :",l,"px *",h,"px")
>
> nb_pixels=l*h
> print("nombre de pixels :",nb_pixels)
>
> #creation de l'image en niveau de gris
> the_image_ndg=Image.new("RGB",(l,h))
>
> # pour y variant de 0 à h-1
> for y in range(h):
> # pour x variant de 0 à l-1
> for x in range(l):
> # deux moyens d'obtenir la couleur RGB d'un pixel, pourvu qu'on
> # ait "converti" l'image à l'ouverture : .convert("RGB")
> # couleur = Image.getpixel(the_image, (x,y))
> # print(x,y,"pixel =",couleur)
> (rouge, vert, bleu) = the_image.getpixel((x,y))
> #print(x,y," : couleur RGB =(",rouge,",",vert,",",bleu,")")
>
> gris=int(0.11*rouge + 0.83*vert + 0.06*bleu)
> if gris < 128:
> noir_ou_blanc=0
> else:
> noir_ou_blanc=255
>
> rouge_sombre = rouge // 2
> vert_sombre = vert // 2
> bleu_sombre = bleu // 2
> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
>
> Tel quel, mon code affiche bien l'image des horribles Cernettes, mais j'ai
> une erreur:
> taille de l'image : 585 px * 473 px
> nombre de pixels : 276705
> Traceback (most recent call last):
> File "img_niveau_de_gris.py", line 31, in <module>
> the_image_ndg=Image.new("RGB",(l,h))
> AttributeError: type object 'Image' has no attribute 'new'
>
> Je comprends que la fonction 'new' n'est pas présente dans le module
> 'PIL.Image'
>
> Qu'à cela ne tienne, je trouve sur cette page :
> https://www.education-du-numerique.fr/module-pil.html un exemple qui commence
> par : from PIL.Image import *
> from PIL import Image
> (au passage, si on peut m'expliquer la différence entre ces deux lignes...)
>
> je décommente donc la ligne '#from PIL import Image' et relance mon
> script :
>
> Traceback (most recent call last):
> File "img_niveau_de_gris.py", line 20, in <module>
> Image.show(the_image)
> AttributeError: module 'PIL.Image' has no attribute 'show'
>
> (J'ai essayé toutes les combinaisons possibles 'PIL.Image.show',
> 'Image.PIL.show', 'PIL.show' avec toujours des erreurs)
>
> J'en conclue (faussement, j'en suis sûr), que je peux soit afficher une
> image, soit en créer une, mais pas les deux en même temps !!
>
>
>
> Petite bizarrerie au passage: bien que mon fichier soit en RGB (vérifié
> grâce à ImageMagick), je suis contraint d'ouvrir le fichier en ajoutant
> '.convert("RGB"), sinon getpixel ne me retourne qu'une valeur entière au
> lieu d'une liste de trois valeurs.
>
> Deuxième bizarrerie : je veux interrompre mon script s'il ne trouve pas
> l'image, donc j'importe 'sys' (tiré d'un exemple trouvé sur le web) et
> j'ai cette erreur :
> File "img_niveau_de_gris.py", line 18
> sys.exit(1)
> ^
> SyntaxError: invalid syntax
Là vous avez simplement oublié une parenthèse dans le print() dans
l'except'.
> Je tourne avec python3 version 3.6.8 sur une Linux Mint à jour.
>
>
> Merci de m'éclairer sur l'erreur que je commets (et de m'excuser pour la
> trivialité de celle-ci, parce qu'elle doit vous paraître énorme).
>
>
> PS : Je ne veux pas de solution à base de numpy ou autre matplot car je
> dois rester leplus simple possible sans aucun impératif de performance
Vous avez juste un problème avec la structure de PIL et PIL.Image en
particulier. new, show et open sont des fonctions de PIL.Image. Il n'y
a aucune raison de simplifier par des imports, des imports * /a
fortiori/ , c'est même néfaste, en particulier aviez-vous vous-même
bien vu que le open était un PIL.Image.open par la magie des imports ?
Donc juste un
import sys
from PIL import Image
puis:
try:
the_image=Image.open(Fichier_Image).convert("RGB")
except:
print("Erreur : le fichier ",Fichier_Image," exsite-t-il ?")
sys.exit(1)
...
the_image.show()
( ou Image._show(the_image) )
...
the_image_ndg=Image.new("RGB", (l, h), "white")
( ou the_image_ndg=Image.new("RGB", (l, h)) )
--
Pierre Maurette
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 17:40 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-14 20:35 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 21:35 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 22:04 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 22:34 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-15 07:33 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-16 22:38 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-17 17:37 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-17 19:55 +0200
csiph-web