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 :

[Tkinter] Est-il possible de faire pivoter des PhotoImage ?


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut [Tkinter] Est-il possible de faire pivoter des PhotoImage ?
    Voilà, je suis en train de créer un jeu pour lequel je vais avoir besoin de faire pivoter des PhotoImage.
    Le jeu est en Tkinter.
    Il me reste toujours la solution de multiplier chaque image par 360 en la faisant pivoter à chaque fois mais je préfèrerais une solution plus facile...
    Existe-t-il une méthode permettant de faire tourner une PhotoImage Tkinter ?

    Merci d'avance

    Sigmar_Avenger

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Pil et Tkinter doivent être compatibles.
    Dans Pil tu peux faire tourner tes images avec la fonction rotate
    Essaie de regarder de ce côté là

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Merci :)
    Merci

    Mais... heu... de l'anglais, damnation

    Apparement Pil est compatible Tkinter (le peu que j'ai compris : il existe une classe ImageTk) mais j'y comprends pas grand chose.

    Existe-t-il un tuto court en français sur Pil ?
    J'ai pas besoin de grand chose , juste le nom des fonctions principales..

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Voici un exemple rapide (remplacer md.gif par une autre image (qui doit être .gif ou .ppm)

    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
    import ImageTk
    import Image
    import Tkinter as Tk
    root = Tk.Tk()
     
    a=Image.open('md.gif')
    dic={}
     
    def change():
        dic['c']=ImageTk.PhotoImage(a.rotate(int(e.get())))
        canvas.itemconfigure(item,image=dic['c'])
     
    e=Tk.Entry(root)
    f=Tk.Button(root, text="changer l'angle", command=change)
    canvas = Tk.Canvas(root)
    photo = Tk.PhotoImage(file='md.gif')
    item = canvas.create_image(10, 10, anchor=Tk.NW, image=photo)
     
    e.pack()
    f.pack()
    canvas.pack()    
    root.mainloop()
    Le seul "souci" (c'est quand même un peu gênant), c'est qu'on perd des bouts dans la rotation (peut-être qu'il y a des paramètres en plus à utliser dans les fonctions)

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Moi j'ai eu des problèmes de transparence avec cette fonction de rotation ... j'avais des pixels magenta qui se rajoutaient à chaque appel ...

  6. #6
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour, je récatualise ce post parce que je cherche a utiliser au miux la fonction de rotation d'image de PIL.
    Le prob, c'est cette fameuse perte d'info (algorithme pas trés comple!!!!)

    D'ailleurs c'est trés bizar, si vous prenez le code de Guigui_, ci dessus et que vous entrez 90, comme angle, on obtient un résultat d'image non coupé (alors que l'on devrait avoir qu'une partie de l'image)
    La fonction rotate est donc incompléte.

    J'ai refléchi a la solution.
    La ou je bloque c'est sur du calcul trigo, ou mes cours de math sont trés loin.

    La résolution du prob pour eviter de tronquer l'image une foir roté, est de définir la taille optimum de la zone contenant l'image roté.
    D'en créer un nouveau donc vierge, d'y coller l'image non roté et de finir par roter l'image finale.
    ainsi dans toutes les positions, on redefini la zonne de travail pour que l'image soit toujours visible.

    Ma question maintenant:
    Je bloque sur l'élaboration de la formule de calcul de L,H respectivement. largeur et hauteur de la zone de travail optimum.

    pouvez vous m'aider?

    2eme question:
    comment localiser le code de la fonction rotate de pil pour en étudier la contenance?

    merci

  7. #7
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    im.rotate(angle, filter=NEAREST, expand=0) => image

    Donc à priori, pour que l'image ne soit pas coupé, il faut mettre expand = 1

  8. #8
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    ca ne marche pas chez moi, en tout cas avec PIL 1.5
    quelle est la version que tu utilises GUIGUI_

    Traceback (most recent call last):
    File "C:\Documents and Settings\Benoit\Mes documents\Mes images\My Archives\test\test.py", line 15, in ?
    a=im.rotate(20,expand=1)
    TypeError: rotate() got an unexpected keyword argument 'expand'

  9. #9
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    cela doit donc être une nouveauté de la version 1.1.6 (qui est en version stable maintenant, donc y'a aucune raison de ne pas l'installer )

  10. #10
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Je confirme que c'est bien une nouveauté de la version 1.1.6 de PIL.
    Une grosse amélioration, trés bien

    Il n'est plus necessaire que je dev mon propre algorithme pour résoudre ce problème. Quel gain de temps!

    Merci Guigui_

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

Discussions similaires

  1. [CR XI] Est-il possible de faire pivoter un object OLE dans Crystal report ?
    Par juju05 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 30/06/2015, 16h19
  2. Est-il possible de faire des classes autoinstanciées ?
    Par All Jinx dans le forum Débuter
    Réponses: 7
    Dernier message: 22/08/2008, 17h36
  3. [VBA-E] est-ce possible de faire intervenir des données excel dans un html?
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2007, 12h22
  4. Réponses: 5
    Dernier message: 28/04/2006, 09h20

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