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 :

Enregistrer une image d'un canvas


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Par défaut Enregistrer une image d'un canvas
    Bonjour,

    J'ai réalisé un dessin dans un canvas en Python, et j'aimerais maintenant l'enregistrer comme une image "classique" (format png par exemple). Quelqu'un saurait-il comment il faut s'y prendre ?

    En vous remerciant pour votre attention,

    Agent322.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    J'ai réalisé un dessin dans un canvas en Python, et j'aimerais maintenant l'enregistrer comme une image "classique" (format png par exemple). Quelqu'un saurait-il comment il faut s'y prendre ?
    On peut utiliser ImageGrab.grab de PIL pour sauvegarder une copie de la fenêtre comme montré dans cette discussion (ancienne mais toujours d'actualité).

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

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Par défaut
    Bonsoir wiztricks,

    Merci pour cette réponse. J'ai tapé le code suivant :


    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
    from PIL import ImageGrab
    from tkinter import *
     
    def Dessiner() :
        F = Tk()
        C = Canvas(F, width = 500, height = 500, bg = 'blue')
        C.pack()
     
        x = Canvas.winfo_rootx(C)
        y = Canvas.winfo_rooty(C)
        w = Canvas.winfo_width(C)
        h = Canvas.winfo_height(C)
     
        img= ImageGrab.grab((x, y, x+w, y+h)).save("IMAGE.png")
     
     
        F.mainloop

    Je n'ai pas mis "x+2", "y+2", "x+w-2", et "y+h-2" comme dans le code de la discussion à laquelle vous m'avez renvoyée, car j'ai un message d'erreur dans ce cas.
    Je pense pouvoir expliquer ce message d'erreur par ceci : les méthodes winfo_width et winfo_height de Canvas renvoient ici 1, ce qui donne, pour "x+w-2" par exemple, 0+1-2 = -1 . C'est donc la fonction grab qui produit l'erreur. La question est : pourquoi winfo_width et winfo_height renvoient 1 et pas 500 ?

    Par ailleurs, est-il possible de choisir l'emplacement du fichier ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Agent322 Voir le message
    La question est : pourquoi winfo_width et winfo_height renvoient 1 et pas 500 ?
    Tant que le Canvas n'est pas affiché (via .pack par exemple), ses dimensions sont inconnues.
    Mais le code que vous postez n'est que la définition d'une fonction: çà ne fait rien. Donc difficile de voir dans quel piège vous êtes tombé.

    Citation Envoyé par Agent322 Voir le message
    Par ailleurs, est-il possible de choisir l'emplacement du fichier ?
    En écrivant .save("IMAGE.png") çà le sauvegarde dans le répertoire courant, pour exprimer "ailleurs", il suffit de prefixer le nom du fichier par celui du répertoire.

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

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Par défaut
    Mais j'ai bien affiché le canvas avec pack avant d'utiliser winfo_width et winfo_height.

    Je suis désolé mais ne comprends ce que je peux fournir de plus que le code de la fonction Dessiner. C'est tout ce qu'il y a d'écrit dans l'éditeur, et quand j'écris Dessiner() dans la console, il m'affiche simplement une fenêtre avec un carré bleu.

    Merci pour la deuxième réponse, j'ai réussi à enregistrer l'image (du moins le pixel), là où je voulais.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Pour des raisons de performances les frameworks graphiques ne rafraîchissent la fenêtre et/ou ses contenus qu'une fois finis le code en cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        img= ImageGrab.grab((x, y, x+w, y+h)).save("IMAGE.png")
     
     
        F.mainloop
    la fenêtre sera affichée après F.mainloop() donc ImageGrab.grab() se fait dans l'inconnu.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Agent322 Voir le message
    Je suis désolé mais ne comprends ce que je peux fournir de plus que le code de la fonction Dessiner. C'est tout ce qu'il y a d'écrit dans l'éditeur, et quand j'écris Dessiner() dans la console, il m'affiche simplement une fenêtre avec un carré bleu.
    Si vous postez du code pour reproduire un problème, on va le recopier dans un fichier (exemple: script.py) puis on va taper python3 script.py dans un terminal quelconque pour voir ce que çà fait.
    Un éditeur est juste un outil de mise au point d'un programme/script.... qui doit pouvoir fonctionner sans (et seulement avec l'interpréteur Python et les éventuelles bibliothèques externes - comme PIL -)

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

Discussions similaires

  1. Enregistrer une image d'un canvas
    Par Maestro64 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 31/01/2014, 08h33
  2. Enregistrer une image à partir d'un canvas
    Par firehist dans le forum Ada
    Réponses: 4
    Dernier message: 18/02/2008, 12h01
  3. [GLScene] Comment enregistrer une image au format TGA
    Par Invité dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 27/05/2005, 15h12
  4. Enregistrer une image
    Par N@sH dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/05/2005, 10h07
  5. enregistrer une image et un identifiant
    Par dosach dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2004, 17h18

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