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

Réseau/Web Python Discussion :

python comme CGI - affichage d'images sous HTML


Sujet :

Réseau/Web Python

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 63
    Points
    63
    Par défaut python comme CGI - affichage d'images sous HTML
    Bonjour,

    j'utilise python en tant que langage CGI. Ce script python génère des images à l'aide d'un script pil et gère la sortie HTML pour le navigateur.

    Mon problème : j'ai un objet image de pil dans ma fonction principale :
    et je veux l'afficher à l'aide d'un tag html <img src="contenu de l'image">

    Le problème c'est que ça n'affiche pas l'image mais mets le code binaire de l'image dans le code source html. J'ai besoin d'un script python qui est appelé dans le img src tag pour pouvoir afficher l'image. Le problème c'est que je ne sais pas comment passer l'objet image vers cette fonction (par l'url, mais comment)...sachant qu'au final c'est qu'un print que ce script renvois pour afficher l'image.


    Quelqu'un a une idée.

    Merci d'avance.

    Peter

  2. #2
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 63
    Points
    63
    Par défaut
    personne n'a jamais eu ce problème ou dois je l'expliquer plus explicitement?

    Merci.

  3. #3
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Sans être sûr à 100%:

    Soit tu enregistres ton image dans un fichier sur ton serveur et tu indiques le path dans ta balise <img />.
    Soit tu dois pouvoir indiquer dans ta balise <img src="mon_script.py"> en precisant le header qui va bien, genre header("Content-type: image/png").

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    salut !!

    quelqu'un de gentil pourrais m'expliquer :

    " Soit tu dois pouvoir indiquer dans ta balise <img src="mon_script.py"> en precisant le header qui va bien, genre header("Content-type: image/png"). "

    y a quoi dans mon_script.py?

    et la première proposition ne fonctionne pas pour ma part

    il y aurait d'autre suggestion?

    merci

  5. #5
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Voici un exemple minimal contenant deux script: un serveur CGI (server.py) et un script CGI de création d'image (image.py):
    les emplacements des scripts sont les suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    - server.py
    - html/
        - cgi-bin/
               image.py
    server.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from BaseHTTPServer import HTTPServer
    from CGIHTTPServer import CGIHTTPRequestHandler
     
     
    import os
     
    os.chdir('html')
    server = HTTPServer(("", 8888), CGIHTTPRequestHandler)
    server.serve_forever()
    image.py
    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
    #! /usr/bin/python
     
    import Image
    import cStringIO
     
    def create_image():
        f = cStringIO.StringIO()
        im = Image.new('RGB', (400,400), (255,255,0))
        im.save(f, "PNG")
     
        print  "Content-Type: image/png\n"
        f.seek(0)
        print f.read()
     
    if __name__ == "__main__":
        create_image()
    Il ne faut pas oublier de permettre l'execution du script image.py (je suis sous linux).
    Pour lancer le serveur:Il suffit alors d'ouvrir son navigateur à l'adresse http://127.0.0.1:8888/cgi-bin/image.py.


    En créant un fichier index.html dans le répertoire html

    index.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html>
     
        <body>
            une jolie image bien moche: <img src="cgi-bin/image.py" />
    </body>
    </html>
    la page est directement accessible via http://127.0.0.1:8888/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    excuse moi de mon incompétence

    je vois que tu as une fonction qui crée une image.py mais comment tu fais pour dire que tu veux afficher mon_image1.jpg ou mon_image2.jpg en image.py

    et a quoi sert cette condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
        create_image()

  7. #7
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Citation Envoyé par Romy-Dina Voir le message
    et a quoi sert cette condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
        create_image()
    Cette condition teste si le script est directement executer par l'interpreteur ou si il est importé en tant que module.
    Si le script est appellé directement, la fonction create_image est appellée.
    Citation Envoyé par Romy-Dina Voir le message
    comment tu fais pour dire que tu veux afficher mon_image1.jpg ou mon_image2.jpg en image.py
    Je ne comprends pas vraiment ta question, dans le code que j'ai posté, je n'ai pas utilisé mon_image1.jpg ou mon_image2.jpg.

    Lorsque le navigateur fait une requête vers l'url http://127.0.0.1:8888/cgi-bin/image.py, le serveur (HTTPServer) instancie un objet
    CGIHTTPRequestHandler avec la requête en paramétre.
    L'objet CGIHTTPRequestHandler permet de servir des fichiers et des scripts CGI, ces derniers sont par défaut placés dans cgi-bin ou dans htbin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from CGIHTTPServer import CGIHTTPRequestHandler 
    >>> CGIHTTPRequestHandler.cgi_directories
    ['/cgi-bin', '/htbin']
    Le script image.py (placé dans le répertoire cgi-bin) est donc interprété comme un script CGI et la sortie du script est envoyé vers le navigateur.

    Je ne sais pas si cela t'aide car je ne sais pas quel est exactement ton problème et ce que tu essayes de faire.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    merci pour tes explications

    en faite ton code sert a récupéré des image créés (si j'ai bien tout compris)

    Et c'est pas vraiment ce que je veux (désolé je me suis trompée )

    j'aimerais afficher sur une page HTML des images sur un disque dur sans les copier ou les déplacer dans le répertoire python.

    une autre questions (je profite tu a l'air d'être un connaisseur)

    pour afficher le css d'une page html écrite par python (cgi) comment on fait?

    en faite je sais pas pourquoi mon css ne s'affiche pas

    mercii encore

Discussions similaires

  1. Problème d'affichage des images sous apache/php
    Par kikoo_of_dijon dans le forum Apache
    Réponses: 9
    Dernier message: 03/11/2007, 16h24
  2. Problème d'affichage d'image sous IE
    Par guigui5931 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/06/2007, 13h03
  3. Pb d'affichage d'images sous EasyPHP
    Par Captain Sparrow dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 14/04/2007, 15h01
  4. [HTML] PB d'affichage d'images en HTML
    Par blandinais dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 19/01/2007, 10h55
  5. [CSS] Affichage d'images sous Firefox & IE
    Par Flushovsky dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 12/06/2005, 12h55

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