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 :

déplacer une image


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut déplacer une image
    Bonjour !

    Je suis en train de buter sur un pb complètement basique : il s'agit de prendre une image du répertoire courant, de la transformer, et de déplacer la transformation dans un sous répertoire créé à l'occasion.

    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
    18
    19
    20
    21
    22
    23
    24
    #imports
    import sys, os.path, os, glob, shutil
    from PIL import Image
     
    #récupération chemin dossier courant
    chemin=os.path.dirname(sys.argv[0])
    courant = os.path.abspath(chemin)
     
    #création du sous répertoire 
    os.mkdir('web')
    dest=os.path.join(courant, 'web')
     
    #transformation des images jpg du répertoire courant
    size = 800, 600
    for infile in glob.glob("*.jpg"):
       #transformation 
       f, e = os.path.splitext(infile)
       im = Image.open(infile)
       im.thumbnail(size, Image.ANTIALIAS)
       im.save("T_" + f+e, "JPEG")
       #déplacement du fichier dans /web
       thumb=os.path.basename(im)
       out=os.path.join(dest, thumb)
       shutil.move(im, out)
    Et ça plante au déplacement , comme dit là :

    Traceback (most recent call last):
    File "C:/Python24/Scripts/pymaweb/test2.py", line 22, in -toplevel-
    thumb=os.path.basename(im)
    File "C:\Python24\lib\ntpath.py", line 200, in basename
    return split(p)[1]
    File "C:\Python24\lib\ntpath.py", line 164, in split
    d, p = splitdrive(p)
    File "C:\Python24\lib\ntpath.py", line 119, in splitdrive
    if p[1:2] == ':':
    File "C:\Python24\Lib\site-packages\PIL\Image.py", line 493, in __getattr__
    raise AttributeError(name)
    AttributeError: __getitem__


    J'ai comme la vague certitude que les méthodes de os.path et shutil ne peuvent pas être appliquées à des instances Image.open().
    Donc question : comment peut-on utiliser les manipulations de path sur des objets issus de PIIL ?

    Merci d'avance !

    Gram'

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Tu as déjà répondu à ta question : les méthodes de os.path et shutil ne peuvent pas être appliquées à des instances Image.open().

    Il faut utiliser l'adresse de ton image (un string) et non pas une instance de Image.open().

    Et pourquoi ne faire directement im.save(out, "JPEG")?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    Il faut utiliser l'adresse de ton image (un string) et non pas une instance de Image.open().
    En clair, il faut plutôt écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    thumn=os.path.basename(str(im))
    ?

    Et pourquoi ne faire directement im.save(out, "JPEG")?
    Excellente question. La réponse : parce que je suis une buse ! et j'ai un peu de mal avec la syntaxe des path...

    Donc je fais (j'ai viré la transformation, je garde que le déplacement de fichiers pour le test) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #création du sous répertoire de destination
    os.mkdir('web')
    out = os.path.join(courant, 'web')
     
    #migration des fichiers image
    for fichier in glob.glob("*.jpg") :
        im=Image.open(fichier)
        im.save(out, "JPEG")
    Et ça me crache une erreur :

    Traceback (most recent call last):
    File "C:\Python24\Scripts\pymaweb\test2.py", line 16, in -toplevel-
    im.save(out, "JPEG")
    File "C:\Python24\Lib\site-packages\PIL\Image.py", line 1399, in save
    fp = __builtin__.open(fp, "wb")
    IOError: [Errno 13] Permission denied: 'C:\\Python24\\Scripts\\pymaweb\\web'

    qui doit être liée à une histoire de chemin windows et unix.

    Je sens la réponse finale proche, mais j'y arrive paaaas !

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Nan tu n'y es pas du tout. Si tu fais str(im), tu te retrouves avec un string du genre <Image.open instance at 0x01E63170>, c'est pas très utile pour récurer le nom du fichier. Le 'path' de ton fichier ce trouve dans la variable fichier. Tu peux vérifier en ajoutant un print fichier.
    Je pense qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thumn=os.path.basename(fichier)
    Pour ton message d'erreur, je pense qu'il vient du fait que le 'path' du fichier n'est pas complet : 'C:\\Python24\\Scripts\\pymaweb\\web'. Il s'agit d'un dossier.

    Je pense qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #création du sous répertoire de destination
    out = 'web'
    if not os.path.isdir(out) 
        os.mkdir(out)
     
     
    #migration des fichiers image
    for fichier in glob.glob("*.jpg") :
        im = Image.open(fichier)
        im.thumbnail(size, Image.ANTIALIAS)
        bName = os.path.basename(fichier)
        fileOut = os.path.join(out, bName)
        im.save(fileOut, "JPEG")

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    ça marche impec !

    Maintenant, je vais me pencher dessus pour comprendre dans le détail : merci et à bientot !

    Gram'

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

Discussions similaires

  1. déplacer une image
    Par xeland dans le forum Windows
    Réponses: 7
    Dernier message: 13/02/2008, 14h33
  2. Déplacer une image dans un formulaire
    Par WITER dans le forum IHM
    Réponses: 2
    Dernier message: 01/11/2007, 03h47
  3. Déplacer une image non téléchargée
    Par Asmodean dans le forum Langage
    Réponses: 1
    Dernier message: 05/07/2007, 12h27
  4. Déplacer une image
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/05/2007, 17h35
  5. Déplacer une image
    Par rikku84 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 19/04/2007, 02h00

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