IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

python 2.7 et pil [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut python 2.7 et pil
    Bonjour tous le monde ,

    J'ai un soucis avec l'utilsation de pil.
    En effet, je souhaite ouvrir mes images depuis le repertoire ou se trouve mon image.
    Si je mets le lien complet (sous ubuntu 18.04).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
     
    from Tkinter import *
    from PIL import Image, ImageTk
    import sys
    import os, os.path
    import time
    import cv2
    from functools import partial
     
    im1 = Image.open("flower11.jpg") 
     
    im1 = im1.save("/home/aip/Bureau/essai python/geeks.jpg")
    Pas de soucis mais en lien relatif j'ai le retour
    Traceback (most recent call last):
    File "/home/aip/Bureau/essai python/essai.py", line 11, in <module>
    im1 = Image.open("flower11.jpg")
    File "/home/aip/.local/lib/python2.7/site-packages/PIL/Image.py", line 2766, in open
    fp = builtins.open(filename, "rb")
    IOError: [Errno 2] No such file or directory: 'flower11.jpg'
    Que dois je ajouter ou modifier, je voudrais mettre un dossier image qui est contenu dans le même repertoire que mon script.

    Cordialement Fabien

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour,

    Ce n'est pas un problème lié à PIL mais c'est un sujet récurrent sur ce forum (et, j'en suis sur, les autres) : qu'est-ce que le répertoire courant ? rapport entre ce dernier et le répertoire où est situé le script (réponse : aucun) ?

    Avant d'ouvrir l'image "flower11.jpg", affiche le contenu du répertoire courant via os.listdir('.') : tu verras que l'image n'y est pas. Affiche aussi le répertoire courant via os.getcwd(). Je suis sur que tu seras surpris (sinon ton code fonctionnerait). Et enfin, adapte ton chemin relatif. L'attribut __file__ des modules est peut-être une solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut
    Merci pour la réponse plxpy
    J'ai ecrit ce que tu m'as cité, j'ai les informations suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd /home/aip/Bureau/essai_python ; /usr/bin/env /usr/bin/python
     /home/aip/.vscode/extensions/ms-python.python-2021.11.1422169775/pythonFiles/lib/python/debugpy/launcher 41671 
    -- /home/aip/Bureau/essai_python/essai.py
    Je n'ai pas spécifiquement compris l'utilisation du __file__ , il permet de liée le module au répertoire?

  4. #4
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Merci pour la réponse plxpy
    J'ai ecrit ce que tu m'as cité, j'ai les informations suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd /home/aip/Bureau/essai_python ; /usr/bin/env /usr/bin/python
     /home/aip/.vscode/extensions/ms-python.python-2021.11.1422169775/pythonFiles/lib/python/debugpy/launcher 41671 
    -- /home/aip/Bureau/essai_python/essai.py
    J'ai parlé de plusieurs affichages intéressants. Qui est quoi là dedans ? le résultat de os.listdir('.') ? de os.getcwd() ?

    L'attribut __file__ d'un module (fichier .py) est le chemin de ce fichier, quel que soit l'endroit où tu es (répertoire courant) quand tu l'exécutes. Tu peux donc en déduire le répertoire où il (le fichier .py) se trouve.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut
    Oui, ce sont les résultats des deux fonctions.

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Oui, ce sont les résultats des deux fonctions.
    Ca m'étonnerait beaucoup... Ca ressemble plus au lancement de ton script via un EDI, point barre.
    Tu as du te contenter d'appeler les fonctions, sans te soucier d'afficher le résultat. On ne peut pas dire que tu nous facilites la vie !

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Bonjour tous le monde ,
    Salut
    Citation Envoyé par noir_desir Voir le message
    Que dois je ajouter ou modifier, je voudrais mettre un dossier image qui est contenu dans le même repertoire que mon script.
    Un nom "relatif" c'est un nom relatif non pas à l'emplacement du programme qui s'exécute (sinon ce serait un nom relatif vraiment "con") mais relatif à ton emplacement à toi quand tu appelles le programme. Et comme le programme lui ne peut pas présumer de ton emplacement à toi quand tu l'appelleras, il ne peut pas travailler en relatif.

    En revanche tu peux créer le nom de ton image en récupérant le nom du programme et en traitant intelligemment ce nom (qui n'est qu'une string) pour en extraire le nom du dossier afin de lui rajouter ensuite le nom de ton image. Ce nom est situé dans la variable __file__ qui contient la chaine exacte que tu utilises pour invoquer le programme.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Salut

    Un nom "relatif" c'est un nom relatif non pas à l'emplacement du programme qui appelle le fichier mais relatif à ton emplacement à toi quand tu appelles le programme. Et comme le programme lui ne peut pas présumer de ton emplacement à toi quand tu l'appelleras, il ne peut pas travailler en relatif.

    En revanche tu peux créer le nom de ton image en récupérant le nom du programme et en traitant intelligemment ce nom (qui n'est qu'une string) pour en extraire le nom du dossier afin de lui rajouter ensuite le nom de ton image. Ce nom est situé dans la variable __file__ qui contient la chaine exacte que tu utilises pour invoquer le programme.
    Je vois effectivement c'est une solution. C'est vrai que je n'y avais pas pensé.
    Par contre je trouve étrange que cela fonctionne la plus du temps dans les exemples fournit sur les internets . Et pas ici.

    Je vais tester ça, et je mettrai une solution . Je pensais betement que l'on le programme venait chercher les répertoires ou lui même était écrit.
    Cordialement fabien

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Par contre je trouve étrange que cela fonctionne la plus du temps dans les exemples fournit sur les internets . Et pas ici.
    Parce que généralement les exemples sur le net on les teste en local dans le même dossier. Tu te trouves dans le dossier de ton script, fatalement si le script travaille en relatif ça fonctionne.

    Citation Envoyé par noir_desir Voir le message
    Je pensais betement que l'on le programme venait chercher les répertoires ou lui même était écrit.
    Pourtant tu travailles sous Ubuntu. Tu n'as jamais lancé des commandes depuis une fenêtre bash telles que mv x y ou rm z ou vi fic.py. Tu pensais donc que les fichiers "x" et "y" étaient pris depuis l'emplacement de "mv", que le fichier "z" était pris depuis l'emplacement de "rm" et que le fichier "fic.py" allait être ouvert depuis l'emplacement de "vi" ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut
    J'ai mis le code suivant afin de recupérer mon chemin et de l'envoyer dans open image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
     
    from Tkinter import *
    from PIL import Image, ImageTk
    import sys
    import os, os.path
    import time
    import cv2
    from functools import partial
     
    chemin = os.path.dirname(os.path.realpath(__file__))
    chemin = chemin + '/image/flower.jpg'
    img = Image.open(chemin)
    Je ne peux pas mettre chemin tel quel car c'est une variable et non une chaine en tant que tel. Est ce que je dois mettre d'autre informaiton, ou bien l'écrire autrement.
    Je suis un peu perdu sur ce que je dois faire.
    cordialement Fabien

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Je ne peux pas mettre chemin tel quel car c'est une variable et non une chaine en tant que tel.
    ...si tu ne sais pas qu'une variable contenant une chaine est une chaine il te faut rapidement recommencer le tutoriel Python (que tu as sûrement lu) à sa première page...

    Citation Envoyé par noir_desir Voir le message
    Je suis un peu perdu sur ce que je dois faire.
    Réfléchir, c'est la base, parce que si tu ne le sais pas, tu peux pas l'apprendre à ton programme. Du print() de temps de temps pour voir si les valeurs calculées correspondent aux valeurs attendues peut aider aussi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 160
    Par défaut
    Bonjour
    Sans doute je n'ai pas dêtre clair dans mon explication, je mets la solution que j'ai trouvé qui semble fonctionner et ne donne pas de retour négatif.
    J'ai trouvé comment mettre mon chemin dans open.image avec le module pathlib qui donne un chemin lisible par open.image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    fom pathlib import Path
    #!/usr/bin/env python
     
    from Tkinter import *
    from PIL import Image, ImageTk
    import sys
    import os, os.path
    import time
    import cv2
    from functools import partial
    from pathlib import Path
     
    chemin = os.path.dirname(os.path.realpath(__file__))
    chemin = chemin + '/image/flower11.jpg'
    path = Path(chemin)
    img = Image.open(path)

  13. #13
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par noir_desir Voir le message
    Je suis un peu perdu sur ce que je dois faire.
    Tu as deux solutions :

    - trouver une "configuration" qui fonctionne, "à tâtons", un peu malgré toi et sans vraiment comprendre pourquoi, et ne plus en changer (l'appliquer aussi à tous tes futurs scripts, et avec cet EDI là !)

    - écrire un script, jouer avec os.getcwd(), vérifier tes intuitions avec os.listdir pour les valider, faire afficher __file__ et lancer ton script de "découverte" (avec tes appels aux fonctions indiquées) depuis l'EDI mais aussi, à la mano, depuis un terminal (ou équivalent sous Linux) et voir les différences, bref, appréhender la chose et ne plus être embêté à l'avenir (si ce n'est par étourderie) avec ces chemins et savoir les adapter à ton contexte du moment.

    Pour moi, il n'y a pas photo.


    ps (Sve@r a répondu entre temps) : je pense aussi que tu es passé un peu vite sur les fondamentaux, en pensant les avoir assimilés

    ps2 : tu viens aussi de répondre. Tu as une solution de type 1 ... à toi de choisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2014, 14h28
  2. Installation de PIL pour python 2.7 windows Vista
    Par Natswel dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 18/12/2011, 08h13
  3. PIL (Python Imaging Library)
    Par forum dans le forum Téléchargez
    Réponses: 0
    Dernier message: 08/07/2011, 16h58
  4. Python et le module PIL
    Par figarojuju dans le forum Debian
    Réponses: 2
    Dernier message: 21/04/2008, 08h46
  5. [PIL] appli tournant en python mais pas en exe
    Par pfeuh dans le forum Py2exe
    Réponses: 11
    Dernier message: 09/03/2006, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo