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 :

GIF avec PIL et python, je ne comprends pas [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2024
    Messages : 5
    Par défaut GIF avec PIL et python, je ne comprends pas
    Bonjour,
    je ne comprends pas pourquoi et comment corriger mon programme.
    J´ai crée des simples images, elles sont correctement mises dans une liste.
    Mais lorsque je sors de ma boucle, toutes les images de la liste sont identiques et mon .GIFF n´est plus celui que je souhaite...

    J´imagine qu´il me manque une étape pour fixer les images de la liste... mais je ne trouve pas.

    Merci d´avance! Je vous joins mon code :

    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
    from PIL import Image, ImageDraw
     
    imags = []
     
    img = Image.new('RGB',(200,200))
     
    #img.show()
     
    imags.append(img)
    img.show()
     
    imags[0].show()
     
    for i in range(10):
        img.putpixel((i,i),(0,255,2*i))
        imags.append(img)
        imags[i].show()
     
    imags[5].show()
    imags[0].show()
     
    imags[0].save('I:pillow_imagedrawbecache.gif',
                   save_all=True, append_images=imags[1:], optimize=False, duration=1000, loop=0)

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Tu modifies l'objet img, mais c'est toujours le même objet .

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2024
    Messages : 5
    Par défaut
    Merci pour votre retour.

    Effectivement, je me suis dit que finalement la liste se retrouvait avec le même élément.

    Comment détourner le problème?
    Merci!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2024
    Messages : 5
    Par défaut
    Bonjour,

    Lorsque j´essaie comme cela, j´ai le même problème.
    Est-ce qu´il existe un truc tout bête? Où est-ce plus compliqué? Merci!

    Voici mon nouveau code :

    from PIL import Image, ImageDraw

    imags = []

    img = Image.new('RGB',(200,200))

    #img.show()

    imags.append(img)

    for i in range(10):
    img.putpixel((i,i),(0,255,2*i))
    imagedefori = img
    imags.append(imagedefori)


    imags[0].save('I:pillow_imagedrawmince.gif',
    save_all=True, append_images=imags[1:], optimize=False, duration=1000, loop=0)

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Il te faut créer une nouvelle image à chaque itération de ta boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(10):
        img = Image.new('RGB',(200,200))
        # ...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par Lebarbok Voir le message
    Est-ce qu´il existe un truc tout bête? Où est-ce plus compliqué?
    Faites marcher vos neurones et essayez de relire le code que vous avez écrit pour comprendre pourquoi il ne fait pas ce que vous voulez.
    Déjà vos images doivent être différentes (donc créer autant d'image qu'il faut) et si vous voulez que la modification côté image ne soit pas identique, il faudrait faire des modifications différentes pour chaque image.

    Si comprendre comment traduire cela en code est compliqué peut être que vous avez sauté la case faire le exos proposés par un tuto. En général, ils sont plus simples car ils travaillent avec des objets qu'on peut visualiser plus facilement qu'une Image PIL. Mais en sortie du tuto. on doit maitriser les boucles imbriquées.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2024
    Messages : 5
    Par défaut
    Merci pour vos conseils! J´ai trouvé une solution, avec juste un .copy() ... (.new ne me convient pas, car je ne veux pas que les anciens pixels disparaissent dans le GIF, mais encore merci MPython Alaplancha, je l´ai pris en note pour un autre GIF!)

    for i in range(10):
    img.putpixel((i,i),(0,255,2*i))
    imagedefori = img.copy()
    imags.append(imagedefori)

    Oh, oui, c´est vrai, Wiztricks, en commençant par la case départ, j´aurais su mieux comment était gérée la mémoire avec Python... Je viens de lire quelques chapitres, ce n´est pas si intuitif!
    Me conseillez-vous donc de travailler plutôt avec Tkinter, par exemple?

    Encore merci!

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

Discussions similaires

  1. python avec windows et WSL installé : un truc que je comprends pas
    Par gitnoob dans le forum Général Python
    Réponses: 1
    Dernier message: 12/04/2024, 21h30
  2. Comment ouvrir une image dans Python avec PIL ?
    Par Wozwald dans le forum Général Python
    Réponses: 3
    Dernier message: 16/06/2021, 18h00
  3. ouverture d'image en python avec PIL
    Par jejzis dans le forum Général Python
    Réponses: 13
    Dernier message: 25/06/2018, 10h54
  4. Créer un gif annimé avec PIL
    Par Julien N dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 01/07/2014, 09h27
  5. Réponses: 4
    Dernier message: 07/01/2008, 23h48

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