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

2D Java Discussion :

[Servlet] [Image] Dessiner sur une image


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [Servlet] [Image] Dessiner sur une image
    Bonjour,

    Voici ce que je veux faire :
    J'ai un fichier enregistré sur le disque.
    Je souhaite l'afficher sur un navigateur web grâce à un servlet, et je souhaite dessiner un carré en pointillés sur l'image.

    Voici ce que j'ai commencé à faire :

    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
     
    // Mon image d'origine
    File file = new File("C:\\image.jpg");
    FileInputStream fis = new FileInputStream(file);
    JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
    BufferedImage buff = decoder.decodeAsBufferedImage();
    fis.close();
     
    Graphics2D g2d = buff.createGraphics();
    // Pour tracer les pointillés
    float dash[] = {10.0f, 5.0f};
    g2d.setStroke(new BasicStroke(8.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 10.0f));
     
    // Ici j'essaie de créer une nouvelle image à partir de la première
    File out = new File("C:\\imageModifiee.jpg");
     
    ImageIO.write(buff, "jpeg", out);
    Dans cette portion de code, j'essaie de créer une nouvelle image.

    Dans l'idéal, je ne voudrais pas enregistrer cette image sur le disque, mais simplement récupérer un tableau de byte pour l'afficher sur la sortie standard du servlet.

    En fait je connais très mal la manipulation des images et le package awt, donc je vous remercie d'avance pour l'aide précieuse que vous pourrez m'apporter !!!

    Merci !

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Tu peu récupérer le flux de sortie (raw) du servlet ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getOutputStream();
    Il te suffit alors de fixer le contectType correspondant à l'image "image/JPEG" de mémoire et d'envoyer l'image dans le flux.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [Servlet] [Image] Dessiner sur une image
    Citation Envoyé par Alwin
    Tu peu récupérer le flux de sortie (raw) du servlet ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getOutputStream();
    Il te suffit alors de fixer le contectType correspondant à l'image "image/JPEG" de mémoire et d'envoyer l'image dans le flux.
    Tout d'abord merci pour ta réponse rapide...

    Pour cette partie là de mon problème, je suis d'accord, seulement, la méthode write prend en argument un tableau de byte, comment l'obtenir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    response.setContentType("image/jpeg");
    ServletOutputStream out = response.getOutputStream();
    out.write([b]byte[][/b]);
    Mais en fait, la plus grande partie de mon problème réside dans le fait de dessiner sur une image.
    Le code que j'ai commencé à écrire ne semble pas satisfaisant, je ne comprend pas comment faire des pointillés...

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [Servlet] [Image] Dessiner sur une image
    Finallement, j'ai affiné mon code et il commence à ressembler à ce que je veux obtenir :

    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
     
    public static void main(String[] args)
    {
      try
      {
         // L'image initiale
         Image img = ImageIO.read(new File("C:\\entree.jpg"));
     
         // Le buffer sur lequel on va appliquer les modifications
         BufferedImage bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
         Graphics2D g2d   = bi.createGraphics();
     
         // On dessine l'image initiale
         g2d.drawImage(img, 0, 0, 200, 300, null);
     
         // On définit le type de la ligne
         float epaisseur = 3;       // Sa taille
         float[] style   = {10, 5}; // Les pointillés seront 2 fois plus longs que les blancs
         g2d.setStroke(new BasicStroke(epaisseur, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, style, 0));
     
         // On définit la couleur de la ligne
         g2d.setColor(Color.RED);
     
         // On dessine un rectangle en pointillés rouges
         g2d.drawRect(0, 0, 300, 150);
     
         // On enregistre les transformations dans un nouveau fichier
         File out = new File("C:\\sortie.jpg");
         ImageIO.write(bi, "jpeg", out);
      }
      catch(Exception e)
      {
        System.out.print("Erreur : " + e.toString());
       }
    }
    Mon dernier problème réside dans les 2 dernières lignes de l'exemple.
    Ici j'enregistre l'image modifiée dans un fichier. Ce que je voudrais c'est juste récupérer un tableau de bytes pour l'afficher sur la sortie standard.

    Personne n'a une idée ??

    Sinon j'espère que cet exemple pourra servir à quelqu'un !

    @+

  5. #5
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Si tu souhaites faire cela, il te suffit de créer un ByteArrayOutputStream qui remplace le flux du fichier ...

    Ainsi ton image est stocké dans un flux en mémoire et tu peux récupérer ton tableau de byte grâce à la méthode toByteArray() et tu peux aussi reverser le contenu de ce flux dans un autre flux de sortie (OutputStream) grâce à la méthode writeTo()

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
        ImageIO.write(bi, "jpeg", out);
        byte[] mon_tableau = out.toByteArray();
    Exemple pour reverser l'image dans le flux de sortie de la servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
        ImageIO.write(bi, "jpeg", out);
        out.writeTo(response.getOutputStream());

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci Debernad, c'est exactement ce que je souhaitais faire !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2015, 20h06
  2. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 00h21
  3. Dessiner sur une image
    Par cquadjul dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/04/2006, 10h44
  4. Dessiner sur une image
    Par alex6891 dans le forum Java ME
    Réponses: 1
    Dernier message: 16/04/2006, 02h45
  5. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 01h58

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