[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:
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 !
[Servlet] [Image] Dessiner sur une image
Citation:
Envoyé par Alwin
Tu peu récupérer le flux de sortie (raw) du servlet ainsi :
Code:
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:
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...
[Servlet] [Image] Dessiner sur une image
Finallement, j'ai affiné mon code et il commence à ressembler à ce que je veux obtenir :
Code:
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 !
@+