Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3215
| Newsgroups | fr.comp.lang.python |
|---|---|
| From | Lulu <lulu042@fry.fr.invalid> |
| Subject | manipulation d'image |
| Organization | koitess? |
| Message-ID | <slrnql8asb.1ca.lulu042@Minty.Rock-n-Roll.org> (permalink) |
| Date | 2019-08-14 17:40 +0200 |
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
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
Back to fr.comp.lang.python | Previous | Next — 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