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

Servlets/JSP Java Discussion :

[JSP] renvoyer une image


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut [JSP] renvoyer une image
    Bonjour,

    Dans ma jsp, j'ai une java.awt.Image que je voudrais renvoyer pour que la page affiche cette image. Avez vous une idée sachant que cette image n'est pas sur mon disque et est produite par une librairie (je n'ai donc pas l'url de l'image).

    Merci !

    WwAvE

  2. #2
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    Haha tien, moi j'ai galéré la dessus comme un dingue, il y à 1 semaine !

    Allez petit cadeau !

    Le problème :
    java.awt.Image ne prévoit pas de transformation vers un inputstream, donc pas de read à envoyer sur le outputstream de response.

    La solution :
    Transformer l'image en BuffredImage, puis Utiliser un ImageEncoder Approprié pour la renvoyer sur le outputstream.

    La fonction de convertion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public static BufferedImage convertImage(Image im) {
            BufferedImage bi = new BufferedImage(im.getWidth(null), im
                    .getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics bg = bi.getGraphics();
            bg.drawImage(im, 0, 0, null);
            bg.dispose();
            return bi;
        }
    La bribe de code à placer dans la servlet. inImage est ton Image à renvoyer.
    outputStream est le outpustream de ta servlet ou autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
    BufferedImage image = convertImage(inImage);
    new JPEGImageEncoderImpl(arrayOutputStream).encode(image);
    int imageSize = arrayOutputStream.size();
    arrayOutputStream.writeTo(outputStream);
    Petite note : le ByteArrayOutputStream sert juste à obtenir la taille pour pouvoir la mettre dans le header, car sans taille le navigateur rame pour télécharger l'image (il attend un certain temps pour vérifier que l'image est bien téléchargée). Donc un response.setContentLength(imageSize);regle ce problème.

    Autre note : Je me base sur du JPEG pour le transfert de l'image, mais on peut tout à fait utiliser un autre codec plus approprié au type d'image, comme le GIF pour des images avec une palette réduite.

    Pikwik

  3. #3
    Membre confirmé Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    j'ai juste une p'tit soucis...
    Je ne peux pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arrayOutputStream.writeTo(response.getOutputStream());
    car dans une JSP
    java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse
    .
    Je n'ai accès qu'à l'objet out de type JSPWriter qui ne contient pas de méthode getOutputStream()...

  4. #4
    Membre expérimenté Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Par défaut
    tu ne peux pas afficher une image comme cela. un JSPWriter ne te permet pas d'écrire autre chose que des caractères sur la page (sinon comment ton navigateur pourrais savoir que c'es tune image ? oO). La solution c'est de faire une servlet qui te servira qu'a faire des images.

Discussions similaires

  1. Une image en session ou comment renvoyer une image sur une page
    Par a tunar with no tune dans le forum Spring
    Réponses: 1
    Dernier message: 26/01/2012, 09h02
  2. Renvoyer une image seulement
    Par tchouck dans le forum BIRT
    Réponses: 4
    Dernier message: 03/06/2008, 16h17
  3. [JSP] Afficher une image a partir du reseau local
    Par chang_koukaii dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/02/2008, 10h03
  4. Affichage dans une jsp d'une image stockée coté client
    Par caballero dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/02/2008, 11h02
  5. [JSP]Afficher une image ...
    Par djoukit dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/06/2004, 16h33

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