Rotation d'image sur tkinter

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. 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. Contributeur
      cela donne une erreur en ligne 6, img inconnu.
      0
    2. Contributeur
      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
    3. @yg_beMais 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
    4. Contributeur
      @Yolnitil 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. 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. Contributeur
      la ligne 6 n'est-elle pas exécutée avant la ligne 16?
      0