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

Entrée/Sortie Java Discussion :

créer une image apartir d'un Byte[] ?


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut créer une image apartir d'un Byte[] ?
    bonjour,

    voila, je suis débutant en java et j'ai besoin de votre aide.

    Je récupère des images à partir de la base sous formes d'objets (attributs : nom, taille, corp). le nom correspond au nom de l'image à créer le corp est un byte[]. je dois donc créer une image à partir de ces données. pour les afficher dans une page jsp.
    quelqu'un pourait me dire comment procéder car pour l'instant je suis un peu à la rue.
    j'ai besoin de créer des images à la vollé à partir de cet objet pour ensuite les redimensionner. Tout vos conseils me seront d'une grande aide.

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    d'abord les images devront etre servies par une servlet spécifique, pas par le jsp. Le jsp ce contentera de faire un <img src="path/to/servlet?imageId=123456789"/> enfin, tu vois l'idée quoi. Quand au servlet, il a juste à prendre le byte[] et à l'écrire dans le response.getOutputStream():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getOutputStream().write(imageBytes);
    Si t'as besoin de manipuler l'image, là c'est plus compliqué, faudrais que tu nous dise déjà quelles libraries tu compte utiliser pour la manipulation d'images.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut
    j'ai vu qu'il y a la librairie JAI pour manipuler les images.
    J'avoue que pour l'instant j'y connait rien en "java - image". c'est pour ça que je demande de l'aide sur ce forum et j'espère bien tombé sur des gens qui vont me conseiller des libraire puissante pour bien gérer les perfs.
    Alors si tu connais des librairies facile à utiliser je suis pronneur.
    Merci à tous.

  4. #4
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quelle genre de manipulation tu souhaite faire? Certaines peuvent etre réalisées avec les affineTransform et des bufferedImage via l'api awt/swing (nécessite un environnement graphique). Pour créer des graphes à partir de nombre, on recommende JFreeChart.

    De toutes facon, la pluspart des ces librairies vont exiger un InputStream en lecture en un outputStream pour la sortie, c'est assez standard. Pour l'outputStream, tu prend direct celui de la réponse, dans le servlet. Pour le inputStream, tu passe un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] mesByte = .....;
    new ByteArrayInputStream(mesBytes);
    Pour ce que j'ai pu en voire, jai est une api de lecture/écriture dans une série de format, pas de transformation. Tu peux aussi trouver des infos ici: http://java.developpez.com/outils/api/#media

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut
    Creer des InputStream / outputStream d'après ce que j'ai lu nécessite la présence ou la création d'un fichier sur le disk. Mon problème justement c'est que le client veut une solution qui n'utilise pas le disk.
    Créer des milliers d'images sur disk nécessite des prog en plus pour le nettoyage des fichiers et tous ce qui s'en suit.
    Pour être plus claire : la solution que demande le client est la suivante.
    1/ on récupère le contenu des images à partir de la BD (ne pose pas de prob : récupération de non de li'amge et son contenu sous forme byte[]).
    2/ creer des images à la vollée sans passer par le disk et dès que la session client est close (fermeture clinet ou timeout) on supprime les images de la mémoire. Il ne veut pas une solution qui utilise le disk.
    J'ai commencé à regarder mais j'ai pas encore trouvé en java quelque chose qui me permet de creer les images en mémoire comme c'est le cas sous ASP avec "new Bitmap(new System.IO.MemoryStream(mon_img))" de les stocker dans les objets de la session sans passer par le disk.
    Alors toutes solutions se rapprochant de ça me serait de grand secour, surtout je suis un peu débutant en java.

  6. #6
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour créer des images en mémoire -> BufferedImage
    une fois l'image 'prete', il faut la convertir dans une format reconnu par le browser (c'est la que les codecs interviennent, java supporte en base le png et le jpeg si ma mémoire est bonne)


    Les input/output stream ne nécessitent pas de fichier sur le disque (dieu merci!). Un inputstream est un flux dans lequel on lit, un outputstream un flux dans lequel on écrit. Il est tout à fait possible de créer des flux en lecture sur des byte[] via, comme mentionné plus haut, le ByteArrayInputStream et il est possible de créer un outpustream qui envoie dans un tableau de byte[] avec ByteArrayOutputStream. De plus tu peux aussi utiliser l'outputStream de la réponse, comme mentionné toujours plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] image = .....;
    response.getOutputStream().write(image);

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut
    Merci pour ton aide.
    j'ai trouvé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int w= 100;
    int h= 100;
    BufferedImage bImg=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = bufImage .createGraphics();  
            // Draw graphics
    g2d.setColor(Color.white);
    g2d.fillRect(0, 0, w, h);
    g2d.setColor(Color.black);
    g2d.fillOval(0, 0, w, h);
            // Graphics context no longer needed so dispose it
    g2d.dispose();
    --------------------------------
    super mais ça me dis pas comment je créer une image en mémoire à partir de mon byte[]. J'explore un peu les methodes de ImageIO mais je suis bloqué pour l'instant.

  8. #8
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par mapoukka Voir le message
    super mais ça me dis pas comment je créer une image en mémoire à partir de mon byte[].
    ImageIO.read(inputStream);

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] image = .....;
    response.getOutputStream().write(image);
    pour utiliser ça il faut passer par une autre servlet, une servlet autre que ma page jsp qui est prévu à affichier mon objet contenant entre autre les images récupérer de la base.
    je crois que je suis entrain de me compliquer la vie ...
    Quelqu'un pourrait me dire étape par étape comment faire car là je commence à etre dans la panade.

  10. #10
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu va d'office avoir besoin de deux morceaux. Le premier, la page qui inclue l'image et fait <img src=......>, le second est la servlet/jsp/filter/phase-listener jsf/ peu import, qui correspond au lien dans le src et qui va faire le rendu de l'image.

    dans ce servlet/jsp/tout ce que tu veux, tu va utiliser l'outputstream de la réponse pour envoyer l'image.

    Ensuite tu fait shématiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    byte[] imageBytes = .... ; //récupération sur la db
    InputStream is = new ByteArrayInputStream(image); 
    BufferedImage image = ImageIO.read(is);
    // manipulation de l'image
    ImageIO.write(image,"png",response.getOutputStream());

Discussions similaires

  1. Créer une image à partir d'un tableau de bytes
    Par rockley dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/12/2011, 13h59
  2. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  3. Créer une image disque
    Par tsing dans le forum Composants
    Réponses: 2
    Dernier message: 14/12/2005, 16h19
  4. comment créer une image sous forme d'eclipse(ronde)
    Par unix27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2005, 22h16
  5. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 09h19

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