# Automatisiertes Bild erzeugen lassen.



## Chris6783 (19. Jul 2007)

Hi,

ich möchte Servlet schreiben, dass dem Bentuzer ein, in eine HTML Seite eingebettetes Bild präsentiert. Das Bild wird zur Laufzeit erzeugt und anschließend per <img ...  ind den HTML Text eingebunden.

Bisher ist es mir gelungen, ein Buffered Image zu erzeugen, und darin auch zu malen. Allerdings wenn ich das Bild nun speichere, wird es im /bin Ordner abgelegt und kann daher nicht in der HTML Seite angezeigt werden.

Gibt es eine einfache Möglichkeit, das ganze elegant zu realisieren?

Danke im Vorraus!
Chris


----------



## Zed (19. Jul 2007)

Du hast also ein Problem mit dem Pfad.

1 Möglichkeit: absolute Pfadangabe 

2 Möglichkeit: request.getContextPath()


----------



## Chris6783 (19. Jul 2007)

Hi,

danke für die rasche hilfe, aber:



			
				Zed hat gesagt.:
			
		

> absolute Pfadangabe



funktioniert nicht, da das Programm auf unterschienen Systemen lauffähig sein sollte



			
				Zed hat gesagt.:
			
		

> request.getContextPath()


liefert mir nur den Ordnername (/webserver/)...


----------



## Zed (19. Jul 2007)

Ist doch schonmal gut, es liefert dir den Pfad zur Webanwendung.

Häng noch den Ordner dran und den Namen wie das IMG heißen soll und schon hast du es an der richtigen Stelle


```
String pfadzumImg = request.getContextPath() + "img/bildname";
```


----------



## Chris6783 (19. Jul 2007)

ja, dann steht in 

pfadzumImg  = "/Webapp1/img/bildanem.jpg";

und da fehlt ja dann immer noch die exakte Ornderangabe, sprich ("c:\..:")


----------



## Zed (19. Jul 2007)

Was spricht dagegen das Bild im Webverzeichnis zu speichern? 

Aber ok dieser Aufruf gibt dir den Pfad zur Webanwendung mit c:\


```
super.getServletContext().getRealPath("/")
```

Geht aber nur im Servlet.


----------



## M.Schlierf (20. Jul 2007)

Warum schreibst du das Bild nicht gleich in den response?

z.B. so:

```
OutputStream os = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
        try{
            encoder.encode(outImage);
        }catch(IOException ex){
            System.out.println("error while encoding image: " + file + " ex:" + ex.getMessage());
        }
```
Dann musst du das Bild garnicht speichern sondern es wird direkt an den browser geschickt.

Wenn du dann noch das nen caching header mitschickst, dan cached der browser das bild und gut is ;-)

Ach so zum verständniss noch, der code sollte in einem Servlet sein und im image tag rufst du dann das Servlet auf

z.B. /ImageLoader/something.jpg

alles was hinterhalb des Servlet pfades steht bekommst du mit: String req = request.getPathInfo();


----------



## Chris6783 (23. Jul 2007)

Hi Danke für die Hilfe! Aber ich möchte ja das Bild in eine Webseite einbette.. Sprich noch ein paar Tabellen und so (auch vom Servlert erzeugt) darum herum bauen.

Und wenn ich es auf deine Art mache, dann wird ja nur das Bild zurück gegeben.


----------

