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 :

Capture d'écran sous mac ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut Capture d'écran sous mac ?
    Bonjour,

    Dans le cadre de ma découverte de socket (c'est un module que j'avais laisser de coté car je n'en avais pas l'utilité) et après avoir envoyer des fichiers j'aimerais maintenant faire une capture du client (capture/réduction de la taille/découpage/comparaison des morceaux différents > envoie des parties différentes > affichage dans un canvas).
    Jusque la pas de problème, du moins sous tux (ImageMagic) ou windows (PIL/ImageGrab), mais sous Mac ?
    J'ai bien fait une recherche sur le site et le web mais je n'ai rien trouver.
    Comme la chose se complique car je n'ai pas de mac est ce que quelqu'un aurais une solution testée ? (oui, je sais : je suis gourmand)

    Edit : Existe il (je n'ai trouver dans ce sens) un module multiplateforme (j'en doute) ?

    Merci d'avance

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    que te faut-il exactement ?

    Au passage, pourrais-tu mettre ici un code minimal montrant comment tu as fait tes captures sous Linux et Windaube ? On pourrait alors tenter d'avoir une solution multi-plateforme si je trouve quelque chose qui fonctionne sous Mac.

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Avec PyQt tu ne devrais pas avoir de problème sous Mac.

    Dans les exemples, sous-dossier desktop, il y a un script de capture, je le joins, si tu ne l'as pas.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Merci pour le QPixmap.grabWindow VinsS. Je ne suis pas trop habitué à Qt et je suis passé à coté. Bien que cela me gène un peut d'importer Qt dans le client je vais regarder cela de plus prêt.

    @rambc: Pour le moment il n'y a pas grand chose et je dois dire qu'a l'heure actuelle je recherche plus a travailler en mémoire plutôt que de créer un fichier.
    Mon code de base pour tester la capture:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    import sys
    import os
     
    fichier = file
    class screencap():
        def __init__(self):
            nomfichier = "scrcap.jpg"
            self.fichier = os.path.join('/tmp', nomfichier)
            if sys.platform == 'linux2':
                self.grab = self._GarbLinux
            elif sys.platform == 'win32':
                import Image, ImageGrab
                self.grab = self._GrabWin
            elif sys.platform == 'darwin':
                self.grab = self._GrabMac
            else:
                pass # TODO
     
        def _GarbLinux(self):
            #_commande = "xwd -frame | convert xwd:- -colors 8 +dither > stdout"
            # fichier = os.system(_commande)
            _commande = "import -silent -window root " + self.fichier
            os.system(_commande)
            return self.fichier
     
        def _GrabWin(self):
            ImageGrab.grab().save(self.fichier, "JPEG")
            return self.fichier
     
        def _GrabMac(self):
            # TODO
            pass
     
    if __name__ == "__main__":
        sccap = screencap()
        img = sccap.grab()
        import Tkinter as Tk
        from PIL import Image, ImageTk
        root =Tk.Tk()
        c = Tk.Canvas(root)
        c.pack()
        fcapture = Image.open(img)
        photo = ImageTk.PhotoImage(fcapture)
        l = Tk.Label(image=photo)
        l.image = photo
        l.pack()
        root.mainloop()
    Merci

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bon je ne vais pas être d'un grand secours alors car je ne me suis jamais penché sur la question.

    Citation Envoyé par PauseKawa Voir le message
    sous tux (ImageMagic)
    Via le lourding MacPort, on a Imagemagick qui s'utilise en ligne de commande.

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Merci rambc,

    En fait je suis tombé sur cela:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import sys
    import os
     
    fichier = file
    class ScreenCap():
        def __init__(self):
            self.fichier = os.path.join(os.environ['HOME'], 'scrcap.jpg')
            if sys.platform == 'linux2':
                self.grab = self._GarbLinux
            elif sys.platform == 'win32':
                import Image, ImageGrab
                self.grab = self._GrabWin
            elif sys.platform == 'darwin':
                self.grab = self._GrabMac
            else:
                pass # TODO
     
        def _GarbLinux(self, name=None):
            if name:
                if os.path.basename(name) == name:
                    _fichier = os.path.join(os.environ['HOME'], name)
                else:
                    _fichier = name
            else:
                _fichier = self.fichier
            try:
                _commande = "import -silent -window root " + _fichier
                os.system(_commande)
            except:
                # Utiliser convert ?
                _commande = "xwd -frame | convert xwd:- -colors 8 +dither " + _fichier
                os.system(_commande)
            return _fichier
     
        def _GrabWin(self, name=None):
            if name:
                if os.path.basename(name) == name:
                    _fichier = os.path.join(os.environ['HOME'], name)
                else:
                    _fichier = name
            else:
                _fichier = self.fichier
            ImageGrab.grab().save(_fichier, "JPEG")
            return _fichier
     
        def _GrabMac(self, name=None):
            if name:
                if os.path.basename(name) == name:
                    _fichier = os.path.join(os.environ['HOME'], name)
                else:
                    _fichier = name
            else:
                _fichier = self.fichier
            # A partir de Darwin 6.0.
            # Est il possible d'utiliser Grab ou Preview en ligne de commande ?
            _commande = "screencapture -m -x -t jpg " + _fichier
            os.system(_commande)
            return _fichier
     
    if __name__ == "__main__":
        sccap = ScreenCap()
        img = sccap.grab(name='test.jpg')
        import Tkinter as Tk
        from PIL import Image, ImageTk
        root =Tk.Tk()
        root.title('Capture')
        fcapture = Image.open(img)
        photo = ImageTk.PhotoImage(fcapture)
        c = Tk.Canvas(root, width=photo.width(), height=photo.height())
        c.pack()
        c.create_image(0, 0, image = photo, anchor=Tk.NW)
        root.mainloop()
    Je ne sais pas si cela fonctionne mais ça correspondrait plus.

    Bon code

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par PauseKawa Voir le message
    Je ne sais pas si cela fonctionne mais ça correspondrait plus.
    Je viens de tester sur mon Mac. J'ai dû faire modifier from PIL import Image, ImageTk en import Image, ImageTk.

    L'image est créée mais la partie Tkinter ne marche pas. photo = ImageTk.PhotoImage(fcapture) provoque l'erreur suivante :
    Traceback (most recent call last):
    File "/Users/moi/test.pyw", line 74, in <module>
    photo = ImageTk.PhotoImage(fcapture)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL-1.1.7-py2.6-macosx-10.3-fat.egg/ImageTk.py", line 116, in __init__
    self.paste(image)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL-1.1.7-py2.6-macosx-10.3-fat.egg/ImageTk.py", line 166, in paste
    im.load()
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL-1.1.7-py2.6-macosx-10.3-fat.egg/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL-1.1.7-py2.6-macosx-10.3-fat.egg/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
    IOError: decoder jpeg not available

  8. #8
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Merci pour ton aide rambc.

    La partie intéressante pour moi étant la capture je n'ai pas fignoler le code de test.
    J'ai presque ce que je voulais : L'écriture sur le disque est trop lourde pour que je l'utilise dans mon but premier. Je vais donc me contenter d'envoyer la capture d'écran du client (facile puisque c'est fichier) avant d'avoir le niveau (pas demain la veille...) pour me lancer dans un vnc-like.
    Par contre je ne vais pas laisser ce code tel quel sur le forum et je posterai dès que possible quelque chose de propre, au cas ou cela serve à quelqu'un.

    Encore merci et à bientôt.

    Patrice

  9. #9
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Par contre je ne vais pas laisser ce code tel quel sur le forum et je posterai dès que possible quelque chose de propre, au cas ou cela serve à quelqu'un.
    Cela m'intéresse. Je voulais nettoyer ton code mais si tu le fais, je serais patient.

    Tiens-nous au courant ici.

Discussions similaires

  1. [Débutant] Fonctions API user32.dll et capture d'écran sous VB
    Par quentinclone dans le forum VB.NET
    Réponses: 0
    Dernier message: 10/11/2012, 14h16
  2. Capture d'écran sous format AVI
    Par Axiome dans le forum Développement Windows
    Réponses: 1
    Dernier message: 02/06/2011, 16h29
  3. Capture d'écran sous Visual Studio 2008
    Par buscom dans le forum Visual Studio
    Réponses: 0
    Dernier message: 24/09/2010, 09h31
  4. Capture d'écran sous forme vidéo
    Par ibreak dans le forum C++
    Réponses: 0
    Dernier message: 02/06/2009, 01h03
  5. Capture d'écran sous Windows
    Par pi-2r dans le forum Débuter
    Réponses: 10
    Dernier message: 10/08/2008, 16h35

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