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

Tkinter Python Discussion :

redimension d'une image


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut redimension d'une image
    Bonjour,

    je veux afficher une image dans un canevas et je voudrais qu'elle soit redimensionnée pour coller à la taille du canevas. J'utilise PIL et PhotoImage. Est ce que vous pouvez m'aider?

    Merci!

  2. #2
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    Salut, voici un lien qui pourra d'aider.

    http://python.developpez.com/faq/?page=Canvas

    Faites des tests


  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    J'ai testé et il me dit :
    File "main.py", line 16, in imgaffiche
    img = Image.open(imgfile1)
    AttributeError: class Image has no attribute 'open'

    Pourtant j'ai bien importé Image de PIL

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Vérifie que tu n'as pas redéfini la variable Image

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    non, j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from PIL import Image, ImageTk
    ...
    ...
    img = Image.open(imgfile1)     #imgfile1 contient le nom du fichier biensur
    photo = ImageTk.PhotoImage(image) 
    can.create_image(0,0, anchor = NW, image=photo)
    Mais je ne touche pas au nom des modules

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Justement, vérifie qu'entre les lignes que tu as donné tu n'as pas défini autre chose nommé Image. Tu peux aussi essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print dir(Image) #affiche la liste des méthodes disponibles
    print Image.__file__ #affiche le nom du fichier contenant l'objet Image

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    open est bien dans la liste des méthode.
    L'aide sur Image.open me dit:
    Help on function open in module PIL.Image:

    open(fp, mode='r')
    Open an image file, without loading the raster data

    J'ai donc essayer avec l'option 'r' mais ça ne change rien.

    La variable __file__ contient C:\Python25\lib\site-packages\PIL\Image.pyc. Il faut le changer? (je ne sais pas à quoi ça correspond)

  8. #8
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    j'ai remarqué une erreur d'après l'exemple.
    Dans ce code tu ouvre ton image virtuellement.

    Citation Envoyé par cicelle Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img = Image.open(imgfile1)     #imgfile1 contient le nom du fichier biensur
    Ensuite, tu le mets dans ta fenêtre. Mais tu n'a pas mis correctement la variable.
    Citation Envoyé par cicelle Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    photo = ImageTk.PhotoImage(image)
    tu devrais mettre img et non image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    photo = ImageTk.PhotoImage(img)
    J'espère que cela résoudra ton problème.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    merci!
    cette boulette est corrigée mais le soucis n'était même pas arrivé jusque là puisqu'il plante sur l'instruction précédente. Il n'aime vraiment pas le open...

  10. #10
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    c'est quoi ta version de python?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    2.5 que j'utilise sur PythonWin

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Bon, après relecture du message d'erreur, l'interpréteur signale que tu disposes d'une classe nommée Image, ce qui interfère avec le module. Les variables que j'ai voulu que tu affiches, c'était dans ton code, histoire de voir si quelque chose interfère. Et effectivement tu sembles avoir une classe nommée Image, rendant le module Image inaccessible.

  13. #13
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    Là aussi tu as mis un variable incorrect:

    Citation Envoyé par cicelle Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    can.create_image(0,0, anchor = NW, image=photo)
    il devrai être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    can.create_image(0,0, anchor = NW, img=photo)
    Bonne chance

  14. #14
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Je n'utilise plus Tkinter depuis un petit moment mais lorsque je rencontre un problème qui ressemble un peu au tien (à savoir utilisation d'un bout de code de la faq, et utilisation non concluante...), je repars depuis le début.

    Le lien que Petugnia t'as donné fonctionne. Lance le dans le même répertoire que celui où tu as ta photo et procède à une personnalisation pas à pas...

    Tu tombera bien à un moment ou à un autre sur ce qui te bloque.

    Bon courage
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé mais je reste une quiche!(l'honneur est sauf! )

    En fait, quand j'appelais Image.open(...), il cherchait la fonction open dans la classe Image, mais comme j'ai importé spécifiquement Image, il suffisait de mettre open(...). De même, il fallait virer ImageTk dans ImageTk.PhotoImage(...).

    La partie qui fait de moi une quiche, c'est que ça marche toujours pas! (bah oui ça aurait été trop beau...) J'ai donc droit à cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Exception in Tkinter callback
    Exception exceptions.AttributeError: "PhotoImage instance has no attribute
    '_PhotoImage__photo'" in <bound method PhotoImage.__del__ of
    <PIL.ImageTk.PhotoImage instance at 0x05CC63C8>> ignored
    Traceback (most recent call last):
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
        return self.func(*args)
      File "main.py", line 19, in imgaffiche
        can.create_image(0,0, anchor = NW, image=photo)
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 2154, in create_image
        return self._create('image', args, kw)
      File "C:\Python25\lib\lib-tk\Tkinter.py", line 2145, in _create
        *(args + self._options(cnf, kw))))
    TypeError: __str__ returned non-string (type file)
    Et là je comprend rien, sauf qu'il aime pas le create_image.


    Pour recentrer le soucis, je veux redimensionner une image (avant de tripatouiller mon code, elle s'affichait bien).
    En relisant la doc de PhotoImage, j'ai vu la fonction zoom(x,y) mais je ne vois pas à quoi correspondent les x et y. Est ce que ce sont les nouvelles tailles en pixels? Ou le nombre de pixel en plus que l'on voudrait? Ou encore le pourcentage? J'ai essayé avec les dimensions de mon canevas, mais ça n'a rien changé.

  16. #16
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    tu pourrai montrer ton code car l'erreur dit que qu'une variable n'est pas en string ???!!!
    Donc ça pourrai nous aider à comprendre ton erreur.

  17. #17
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    je me suis inspiré de ton code pour mettre une image et j'ai exactement la même chose en python3, tout en faisant les modification nécéssaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class logo:
        img = open("logo.ico") 
        photo = PhotoImage(img) 
     
        canvas = Canvas(fenetre, width = 40, height = 40, bg='lightblue') 
        canvas.create_image(0,0, anchor = NW, image=photo)
        canvas.pack()

  18. #18
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Ça manque de code...
    Si c'est pour redimensionner une image en fonction de ton Canvas, tu peux t'inspirer de ceci :
    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from Tkinter import *
    from PIL import Image, ImageTk
     
    class TestResize:
        def __init__(self):
            self.root=Tk()
            self.image = Image.open("test.jpg")
            self.x, self.y = self.image.size
            self.can=Canvas(self.root,bg='white')
            self.can.bind("<Configure>",self.resize)
            self.can.pack(expand=Y,fill=BOTH)
     
        def resize(self,event):
            self.img=self.image.resize((event.width,event.height))
            self.mon_image = ImageTk.PhotoImage(self.img)
            self.can.create_image(0, 0, image=self.mon_image, anchor=NW)
     
    app=TestResize()
    app.root.mainloop()

  19. #19
    Membre du Club Avatar de Petugnia
    Profil pro
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 63
    Points
    63
    Par défaut
    malheureusement pour moi je ne peux pas car PIL n'est pas adapté pour python 3.0. Également j'ai toujours la même erreur même en faisant les modifications nécessaire.

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Vérifie tes imports, et si nécessaire relis ceci : Comment importer des modules/fonctions/fichiers ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from PIL import Image, ImageTk
    import Tkinter as Tk
    img = Image.open('image.jpg')
    root = Tk.Tk()
    photo = Tk.PhotoImage(img)
    can = Tk.Canvas(root, bg='white')
    can.pack(expand=Tk.Y, fill=Tk.BOTH)
    can.create_image(0, 0, image=photo, anchor=Tk.NW)
    => Donne la même erreur que toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from PIL import Image, ImageTk
    import Tkinter as Tk
    img = Image.open('image.jpg')
    root = Tk.Tk()
    photo = ImageTk.PhotoImage(img)
    can = Tk.Canvas(root, bg='white')
    can.pack(expand=Tk.Y, fill=Tk.BOTH)
    can.create_image(0, 0, image=photo, anchor=Tk.NW)
    => Fonctionne sans problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.1] Redimension d'une image
    Par panganino dans le forum Langage
    Réponses: 1
    Dernier message: 12/05/2010, 12h47
  2. [GD] Redimension et upload d'une image
    Par gpsevasion dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 18/04/2010, 19h57
  3. redimension d'une image
    Par ninasec dans le forum MATLAB
    Réponses: 1
    Dernier message: 07/04/2009, 13h36
  4. [ImageMagick] Redimension d'une image
    Par Shin_RockmanX dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/04/2006, 21h17

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