Rotation d'image sur tkinter

Yolnit Messages postés 4 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à coder un jeu où 3 cercles concentriques rentrent en rotation ou les rotations dépendent des cliques. Je suis face au problème où avec Pillow et des angles non multiples de 90°, mes images se déforment. Je ne vois pas comment contrer ce problème graphique..

Quelqu'un peut m'aider à trouver un moyen pratique d'avoir des rotations avec des angles très petits sans déformations?

Cordialement.

3 réponses

  1. Yolnit Messages postés 4 Statut Membre
     
    Voici le code en espérant avoir correctement respecté les normes du site. J'ai laissé l'angle de rotate à 90 mais vous pouvez essayer d'autres sans soucis, à vos risques et périls pour la qualité..
    Ci-joint l'image


    import tkinter as tk
    from PIL import Image, ImageTk
    import time
    
    root = tk.Tk ()
    canvas = tk.Canvas (root, width = img.size[0], height = img.size[1], bg = "white")
    canvas.pack ()
    
    def rotate (degré):
        global img
        img = img.rotate (degré)
        global tkimg
        tkimg = ImageTk.PhotoImage (img)
        canvas.create_image (img.size[0]/2,img.size[1]/2, image = tkimg, tags = "img")
        
    img = Image.open ("target1.png")
    
    rotate(0)
    
    def pressed (event):
        rotate (90)
    canvas.tag_bind ("img", "<B1-Motion>", pressed)
    root.mainloop ()
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      cela donne une erreur en ligne 6, img inconnu.
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      l'image se dégrade, ne se déforme pas.
      il me semble que cela est causé par des rotations successives de l'image, et peut facilement être évité en n'appliquant qu'une seule rotation à l'image.
      0
      1. Yolnit Messages postés 4 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Mais le but est de pouvoir faire tourner l'image peu importe l'angle et ce plusieurs fois sans déformation. Y a-t-il des solutions?
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Yolnit Messages postés 4 Statut Membre
         
        il n'est pas nécessaire de faire tourner plusieurs fois la même image.
        il faut éviter d'utiliser une image résultat d'une rotation.
        il est préférable, chaque fois que tu veux afficher l'image, d'appliquer une seule rotation en repartant de l'image de départ.
        0
  2. Yolnit Messages postés 4 Statut Membre
     
    L'unique erreur est ligne 22,

    cnv.tag_bind ("img", "<B1-Motion>", pressed) est la correction de cette ligne.

    SI vous avez une erreur c'est que le format de l'image enregistré ne correspond pas à celui dans open.Image ligne 16.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      la ligne 6 n'est-elle pas exécutée avant la ligne 16?
      0