Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2953 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Python et Pillow

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Python et Pillow

n°2382467
jpl38
Posté le 22-04-2021 à 14:35:04  profilanswer
 

Bonjour
je cherche à manipuler des images avec Python et la bibliothèque Pillow (je suis au niveau 0 ...)
Le code suivant provient de https://github.com/python-pillow/Pillow/issues/2601
 

Code :
  1. >>> from PIL import Image
  2. >>> img = Image.open("01.jpg" )
  3. >>> img.fp
  4. <_io.BufferedReader name='01.jpg'>
  5. >>> img.fp.close()  # success
  6. >>> img = Image.open("01.jpg" )
  7. >>> img.fp
  8. <_io.BufferedReader name='01.jpg'>
  9. >>> px = img.load()  # load() close fp??
  10. >>> img.fp
  11. >>> img.fp.close()  # fail, as the documents claims so that.
  12. Traceback (most recent call last):
  13.   File "<console>", line 1, in <module>
  14. AttributeError: 'NoneType' object has no attribute 'close'
  15. >>>


Voici ma question : que fait l'instruction  
   

Code :
  1. img.fp


de la ligne 3 ?
 
En tapant  
 

Code :
  1. type(img)


la réponse est  
   

Code :
  1. <class 'PIL.PngImagePlugin.PngImageFile'>


 
J'ai cherché des renseignements sur cette classe dans la doc de Pillow et je n'ai rien trouvé sur .fp
Quelqu'un aurait une explication ou un lien ?  
Merci d'avance

mood
Publicité
Posté le 22-04-2021 à 14:35:04  profilanswer
 

n°2382472
mechkurt
Posté le 22-04-2021 à 15:15:47  profilanswer
 

Je ne connais pas python mais en lisant les commentaires suivant qui pointe sur cette page
https://github.com/python-pillow/Pi [...] -280877645
Il semblerait que fp veuillent dire file pointer...
 
Du coups faire un affichage de img.fp c'est du débug pour afficher l''état actuel (enfin je suppose, j'y connais pas grand chose en python ^^).


Message édité par mechkurt le 22-04-2021 à 15:16:39

---------------
D3
n°2382542
jpl38
Posté le 23-04-2021 à 09:58:14  profilanswer
 

Merci pour ta contribution
J'ai avancé (un peu...)
l'instruction "img.fp" renvoie dans Pillow un objet BufferedReader dont j'ignore tout.
Ce qui est curieux, c'est que pour renvoyer cet objet sur un fichier texte, on utilise la syntaxe "fichier.buffer" :
 

Code :
  1. # Importing Image from PIL package
  2. from PIL import Image
  3. img = Image.open("MonImage.png" )
  4. print(img.fp)
  5. img.close
  6. fichier = open('test.txt', 'r')
  7. print(fichier.buffer)
  8. fichier.close


Sortie :  

Code :
  1. <_io.BufferedReader name='MonImage.png'>
  2. <_io.BufferedReader name='test.txt'>


Tout ceci est très cohérent, buffer d'un côté, fp de l'autre

n°2382617
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2021 à 19:55:54  profilanswer
 

jpl38 a écrit :

Merci pour ta contribution
J'ai avancé (un peu...)
l'instruction "img.fp" renvoie dans Pillow un objet BufferedReader dont j'ignore tout.
Ce qui est curieux, c'est que pour renvoyer cet objet sur un fichier texte, on utilise la syntaxe "fichier.buffer" :

 
Code :
  1. # Importing Image from PIL package
  2. from PIL import Image
  3. img = Image.open("MonImage.png" )
  4. print(img.fp)
  5. img.close
  6. fichier = open('test.txt', 'r')
  7. print(fichier.buffer)
  8. fichier.close


Sortie :

Code :
  1. <_io.BufferedReader name='MonImage.png'>
  2. <_io.BufferedReader name='test.txt'>


Tout ceci est très cohérent, buffer d'un côté, fp de l'autre


Ce sont des structures différentes dans des bases de code différentes, rien n'impose d'utiliser le même nom d'attribut [:spamafote] D'autant moins quand leur relation au BufferedReader n'est pas la même. Sans même parler du fait que "fp" est un détail d'implémentation.

 

Un "fichier texte", c'est un TextIOWrapper, c'est à dire une couche par dessus un buffer binaire qui va automatiquement s'occuper de l'encodage et du décodage.

 

Quand tu ouvres un fichier en mode binaire, il n'y a pas de couche textuelle (vu que tu veux pas du texte), donc t'as directement … un BufferedReader (accessoirement t'as pas cherché bien loin pour pas le trouver).

 

Une image est généralement binaire, donc pour Pillow un pointeur vers un fichier (binaire) ça va stocker un BufferedReader, il s'en fout du type spécifique il sait juste que c'est ce qui sort de `open` [:spamafote]

 

Accessoirement, en dehors d'être un mauvais style tes accès à "close" font rien du tout, c'est une méthode, une méthode ça s'appelle.


Message édité par masklinn le 23-04-2021 à 20:04:32

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2382618
jpl38
Posté le 23-04-2021 à 20:26:05  profilanswer
 

Heureusement que tu précises ne pas connaitre grand chose à Python, on n'a pas les mêmes unités ....
Je suppose que pour les lignes 6 et 9, j'ai oublié les parenthèses.
Pour le bon style tu fais allusion à with ...  as ... ?

n°2382624
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2021 à 20:55:30  profilanswer
 

jpl38 a écrit :

Heureusement que tu précises ne pas connaitre grand chose à Python, on n'a pas les mêmes unités ....


Tu confonds deux personnes différentes.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2382630
jpl38
Posté le 23-04-2021 à 22:36:54  profilanswer
 

Merde, toutes mes excuses à vous deux.
Et pour le style lourdingue ?


Message édité par jpl38 le 23-04-2021 à 22:38:45

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Python et Pillow

 

Sujets relatifs
XML espace dans les noms de noeud, acces en pythonMini projet python (Maintenance machines)
Impossible d'exécuter un script PythonUtiliser une commande curl en Python
[Python] Achat automatique AMAZONIDLE Python
[python] PyRun_SimpleFile ne fait rien [Python] Programmation sur Windows
[Python] Projets de programmation pour débutant 
Plus de sujets relatifs à : Python et Pillow


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR