Dynamically create image from JAX-RS servlet

dynamic-image-generation, image, java, jax-rs

Solution

Take a look at http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e323:

 @GET
 @Path("/images/{image}")
 @Produces("image/*")
 public Response getImage(@PathParam("image") String image) {
     File f = new File(image);

     if (!f.exists()) {
         throw new WebApplicationException(404);
     }

     String mt = new MimetypesFileTypeMap().getContentType(f);
     return Response.ok(f, mt).build();
 }

Problem

Is it possible to create a PNG image and output it straight to the browser as part of a JAX-RS resource? Something like this: ``` @Path("img/{externalId}") @Stateless @Produces({"image/png"}) public class MyImgResource { @GET public Response (@PathParam("externalId") String externalId) { // create image, write to buffered output stream return Response.ok().entity(stream).build(); } } ``` Would this work? Do I have to take care of the correct headers (Content-Type), or is this done by the `@Produces` annotation? Can output an image as a `Response`? Can I build a `Response` from a stream?

Original source