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

C# Discussion :

Afficher image base64


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut Afficher image base64
    Bonjour,

    J'aurais voulu savoir comme on faisait pour afficher une image recu en base 64 dans une page web.
    J'ai réussi à le faire avec ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.IO.MemoryStream ms = ""; // image en base64;
    Response.ContentType = "image/Jpeg";
    ms.WriteTo(Response.OutputStream);
    Mais avec cette façon de faire, je ne peux rien rajouté à ma page car il attend qu'une seule image.

    Quelqu'un serait-il comment faire pour l'insérer directement dans une page web ?

    Merci d'avance

    EDIT : j'arrive aussi à la convertir en image si ca peut aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(ms);

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Mric_ Voir le message
    J'ai réussi à le faire avec ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.IO.MemoryStream ms = ""; // image en base64;
    Response.ContentType = "image/Jpeg";
    ms.WriteTo(Response.OutputStream);
    Euh... t'es sûr ?? Parce que je vois mal comment on peut affecter une chaine de caractère à un MemoryStream, vu qu'il n'existe aucune conversion implicite... Il faudrait déjà convertir la chaine base64 en byte[] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string base64Image = "...";
    byte[] imageBytes = Convert.FromBase64String(base64Image);
    MemoryStream ms = new MemoryStream(imageBytes);
    ...
    Sinon, je suis pas sûr d'avoir bien compris ton problème... tu veux envoyer l'image sur la même réponse que le reste de la page ? C'est pas possible... en HTML, une image est spécifiée par une balise <img> avec l'adresse de l'image, il faut donc l'envoi de l'image séparément du reste de la page. (en fait il y a un moyen d'intégrer l'image dans la page, mais c'est pas super... d'ailleurs c'est pas supporté par tous les navigateurs)

    Si c'est une image que tu dois générer dynamiquement, le plus simple est de créer un Handler ASP.NET (.ashx). Dans le code, tu implémentes juste la méthode ProcessRequest pour analyser la requête et envoyer la réponse appropriée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Tu as raison c'est bien un tableau de byte que j'ai pour mon MemoryStream.
    En fait je fais une authentification grâce à une image généré par un web service. Ce dernier me renvoi l'image ainsi qu'un identifiant unique correspondant à l'image.

    Donc ensuite, via un formulaire, je dois renvoyer le login, le mot de passe (qui dépend de l'image) et l'identifiant unique de l'image.

    Sinon j'ai un peu contourné le problème en mettant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body>
        <img src="http://127.0.0.1:63028/Image.aspx" alt="ImageCode"/>
    </body>
    Image.aspx contient uniquement mon image (de la même façon que mon code au dessus) et donc mon affichage marche.

    Le problème c'est que j'appelle mon web service 2 fois (une fois dans la page par défaut pour avoir l'identifiant unique et une fois dans Image.aspx pour l'image). Donc au final j'ai généré 2 images et l'identifiant correspond plus à l'image.

    Pour ton Handler, je connais mais pas plus que ca (je suis en Java d'habitude donc je galère un peu sur le .net en ce moment :s), il renverrait quoi au final ?

    Merci en tout cas

    PS : Ton moyen pas compatible avec tous les navigateur c'était <img src="data:image/jpeg;base64,..." /> ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il suffit que tu enregistres l'image quelque part (en session par exemple), pour ne pas la générer 2 fois...

    Citation Envoyé par Mric_ Voir le message
    Pour ton Handler, je connais mais pas plus que ca (je suis en Java d'habitude donc je galère un peu sur le .net en ce moment :s), il renverrait quoi au final ?
    Ben il renverrait l'image, de la même façon que ton Image.aspx, sauf qu'en général on utilise plutôt un .aspx pour renvoyer du HTML...


    Citation Envoyé par Mric_ Voir le message
    PS : Ton moyen pas compatible avec tous les navigateur c'était <img src="data:image/jpeg;base64,..." /> ?
    C'est ça

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Une tite dernière aide, pour le handler, je le crée mais il ne me renvoi pas l'image.
    Voici la fonction que tu m'as dit de modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "image/Jpeg";
                GridsureService service = new GridsureService();
                getAuthenticationGridResponseType response = service.getAuthenticationGrid(new getAuthenticationGridType()); //appel du web service
                System.IO.MemoryStream ms = new System.IO.MemoryStream(response.grid);
                ms.WriteTo(context.Response.Write);
            }
    Faut-il que je convertisse en Image avant d'écrire le flux ?

    Merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ms.WriteTo(context.Response.OutputStream);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Je suis sur que c'est tout con, mais la je bloque bettement. Ton code marche mais j'ai ceci quand j'essaye d'appeler mon Handler :

    Message d'erreur de l'analyseur: Impossible de créer le type 'WebApplication2.Image'.
    Erreur source:
    Ligne 1 : <%@ WebHandler Language="C#" CodeBehind="Image.ashx.cs" Class="WebApplication2.Image" %>

    Cette ligne 1 est généré automatiquement par la Handler et j'arrive pas a l'enlever ou la modifier ...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le code de la classe est bien dans Image.ashx.cs ? Tu as bien recompilé le projet ?

    et j'arrive pas a l'enlever ou la modifier
    ben ça c'est nouveau
    normalement on peut toujours modifier les fichiers .as?x, même en cours d'exécution...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Oui oui j'ai bien Image.ashx.cs, je met le code en entier :

    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
    using System;
    using System.Collections;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;
     
    namespace WebApplication2
    {
        /// <summary>
        /// Description résumée de $codebehindclassname$
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class Image : IHttpHandler
        {
     
            public void ProcessRequest(HttpContext context)
            {
                GridsureService service = new GridsureService();
                getAuthenticationGridResponseType response = service.getAuthenticationGrid(new getAuthenticationGridType());
                context.Session.Add("idGrid", response.token);
                context.Response.ContentType = "image/jpeg";
                System.IO.MemoryStream ms = new System.IO.MemoryStream(response.grid);
                ms.WriteTo(context.Response.Write);
            }
     
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    je pense pas que le problème soit lié à ça, mais pourquoi tu mets des attributs WebService ? c'est pas un web service, juste un handler HTTP...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    Ils se sont mis par défaut, mais même en les enlevant ça ne change rien.
    Au pire je reste avec mon Image.aspx !

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Mric_ Voir le message
    Au pire je reste avec mon Image.aspx !
    Oui, si ça fonctionne...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Par défaut
    J'aurai essayé ! Merci a toi tomLev

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/09/2012, 16h07
  2. [XSLT] Afficher image en Base64
    Par pilz dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 15/02/2010, 16h30
  3. Réponses: 9
    Dernier message: 27/01/2006, 18h00
  4. [MySQL] Afficher image stockée sous forme binaire
    Par Luffy Duck dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2005, 18h30
  5. afficher image
    Par sanosuke dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/10/2004, 09h43

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