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

Java Discussion :

convertir chaine de caractère hexadecimal en image JAVA ou image HTML


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut convertir chaine de caractère hexadecimal en image JAVA ou image HTML
    Bonjour , lorsque j'extrait le binaire du champ photo d'une table d'une base de données SQL Server (format du champ : Image) , j'obtiens une énorme chaine de caractères d'hexadecimal :

    FFD8************

    Comment la convertir en image dans une appli JAVA/J2EE?
    merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    tu crée un servlet, un filtre ou tout autre moyen te plaisant dont le role est de recevoir par le browser l'identifiant de l'image et dez renvoyer dans le outputstream le contenu de l'image. Pour renvoyer l'image il suffit de faire un response.getOutputStream.write(byte[] image)

    Du coté du code qui génère la page web, il faut lui faire écrire <img src="http://serveur/application/servletImage?imageId=123456789"/> par exemple.

  3. #3
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Voici 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
     
    //on va chercher l'image en base
              String query = new String("SELECT Photo FROM TPDA_PHOTO WHERE CodeBarre = 90");
     
              Vector data = new Vector();
              Connection conn = tool.getConnection();
     
              try{
                      // Create the statement
                      Statement stmt = conn.createStatement();
     
                      // Query all columns from the EMP table
                      ResultSet rset = stmt.executeQuery(query);
     
                      Blob blob = rset.getBlob("Photo");
                      response.getOutputStream.write(blob);
     
              }catch(Exception e){
     
              }
    Il ne trouve pas la méthode getOutputStream.
    Comment faire? malgré l'import de import javax.servlet.*;

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    c'est write(byte[]), tu dois donc d'abord extraire les byte de l'outputstream. Quand à l'objet "response", il t'es passé en paramettre de la méthode doGet ou doPost ou service de ta servlet.

  5. #5
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    J'ai du mal à maitriser l'appel de la servlet.
    Je vais faire quelque chose en dur pour pas avoir à m'embêter avec un passage de paramétres;

    ma servlet contient le code suivant :


    imageServlet.java
    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
     try{
                      // Create the statement
                      Statement stmt = conn.createStatement();
    
                      // Query all columns from the EMP table
                      ResultSet rset = stmt.executeQuery(query);
    
                      Blob blob = rset.getBlob("imgColumn");
                      int length = (int)blob.length();
                      byte[] image =  blob.getBytes(1,length);
                      response.getOutputStream().write(image);
    
              }catch(Exception e){
    
              }
    Et dans mon autre servlet qui genere l'output pour de vrai :

    Handler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         imageBalise = new String("<img src='/servletImage'/>");
         ....
         try{
                   out.println("<br/>IMAGE: " + imageBalise);
         }
    Il m'affiche rien.
    Dans le code source je récupere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <head>
    <title>Servlet Traitement</title>
    </head>
    <body>
    CODE RETOUR: 1
    <br/>RETOUR: ENTREE BADGE 771711975
    <br/>IMAGE: <img src='/servletImage'/>
    </body>
    </html>
    Je précise que mon web.xml est bien renseigné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <servlet>
            <servlet-name>servletImage</servlet-name>
            <servlet-class>servletImage</servlet-class>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>servletImage</servlet-name>
            <url-pattern>/servletImage</url-pattern>
        </servlet-mapping>

  6. #6
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    En utilisant une autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     //requete SQL ....
    System.out.println("GUI"+rset.getBlob("Photo").toString());
                                  byte[] imageBytes = rset.getBytes("Photo") ; //récupération sur la db
                                  InputStream is = new ByteArrayInputStream(imageBytes);
                                  BufferedImage image = ImageIO.read(is);
                                  // manipulation de l'image
                                  ImageIO.write(image,"png",response.getOutputStream());
    Il m'affiche une série de caractères bien chinois..

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    l'url doit normalement être "/nomDeTaWebAppSurLeServeur/nomDeLaServlet", pour la consituter correctement, il suffit de lui concaténer à l'avant la valeur de request.getContextPath(). N'oublie pas aussi de passer le tout dans response.encodeURL() pour le tracking de la session.

  8. #8
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Ce bout de code marche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    byte[] imageBytes = rset.getBytes("Photo") ; //récupération sur la db
                                  InputStream is = new ByteArrayInputStream(imageBytes);
                                  BufferedImage image = ImageIO.read(is);
                                  // manipulation de l'image
                                  // set the content type so the browser can see this as a picture
                                   response.setContentType("image/png");
     
                                   // send the picture
                                   PngEncoder encoder = new PngEncoder(image, false, 0, 9);
                                   response.getOutputStream().write(encoder.pngEncode());
    JSP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <br/><img src="http://localhost:8084/badgeuse/servletImage?imageId=<%=request.getAttribute("image")%>"/>

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    tu va grever les performance de ton programme inutilement. Tu prend l'image dans un format quelconque (exemple jpeg) pour ensuite la convertir en png et l'envoyer au client. Non seulement cette convertion prend du temsp cpu, elle prend aussi de la mémoire et risque dans la majorité des cas à aboutir à une image plus lourde que l'image d'origine (-> perte aussi de performances réseau). En plus, si c'est un des nobmreux format gérés par les navigateur mais pas par java, tu va avoir des exception (exemple si c'est un .bmp, un .tiff, etc)


    Le code suivant devrais marche aussi bien tout en allégeant le processus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] imageBytes = rset.getBytes("Photo") ; //récupération sur la db 
    response.getOutputStream().write(imageBytes);
    Le content-type n'étant pas nécessaire si l'image est utilisée dans un tag <img>. Evidement, en accès direct, sans content-type, le browser saura pas quoi faire du flux. Tu peux dans ce cas éventuellement définir un content-type à image/*

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

Discussions similaires

  1. Convertir chaine de caractère en float C#
    Par StephaneCapponi dans le forum C#
    Réponses: 18
    Dernier message: 23/04/2015, 16h57
  2. Réponses: 15
    Dernier message: 22/08/2012, 20h11
  3. convertir chaine de caractère hexadecimale en image
    Par cotede2 dans le forum ImageJ
    Réponses: 1
    Dernier message: 20/04/2009, 16h15
  4. Convertir chaine de caractère en suite de codes ASCII
    Par mixka13 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/11/2008, 17h05
  5. [VB.net 2005] convertir chaine de caractère en type 'date'
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/07/2006, 23h14

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