2011-11-04 16 views
33

He usado com.sun.image.codec.jpeg.JPEGImageEncoder para manejar imágenes JPEG, como gráficos y otros, en mi aplicación web. Ahora, estoy actualizando mi máquina para usar JDK7, pero esta versión desaprobó esta clase. A continuación se muestra el código que tengo que cambiar:Cómo reemplazar com.sun.image.codec.jpeg.JPEGImageEncoder en este código?

public void processChart(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    response.setContentType("image/jpeg"); 
    out = response.getOutputStream(); 
    response.setHeader("Pragma", "no-cache"); 
    response.setHeader("Cache-Control", "no-cache"); 
    response.setDateHeader("Expires",0); 
    try { 
     int w = Integer.parseInt(request.getParameter("WIDTH")); 
     int h = Integer.parseInt(request.getParameter("HEIGHT")); 
     java.awt.image.BufferedImage ChartImage = new java.awt.image.BufferedImage(w,h,java.awt.image.BufferedImage.TYPE_INT_RGB); 
     java.awt.Graphics2D ChartGraphics = ChartImage.createGraphics(); 
     Chart c = getChart(request); 
     c.setSize(w,h); 
     c.paint(ChartGraphics); 
     // CODE BELOW TO CHANGE... 
     com.sun.image.codec.jpeg.JPEGImageEncoder encoder = 
           com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(out); 
     encoder.encode(ChartImage); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private Chart getChart(HttpServletRequest request) { 
    chartLoader loader = new chartLoader(null); 
    loader.paintDirect = true; 
    java.util.Enumeration ps = request.getParameterNames(); 
    while (ps.hasMoreElements()) { 
     String name = (String) ps.nextElement(); 
     loader.setParameter(name,request.getParameter(name)); 
    } 
    // create Chart 
    Chart chart = loader.build(false,false); 
    Chart.tmpImage = new java.awt.image.BufferedImage(200,200,java.awt.image.BufferedImage.TYPE_INT_RGB); 
    return chart; 
} 
+0

Hola, ¿podría compartir la versión de la biblioteca está utilizando para esta conversión de la imagen, im enfrenta el mismo problema pero buscando una cierta edición de la biblioteca, que será grande si comparte la dependencia Maven. – NoNaMe

Respuesta

37

Uso ImageIO, se puede leer/escribir archivos JPEG, PNG, GIF, BMP y fuera de la caja.

ImageIO.write(ChartImage, "jpeg", out); 

Por lo general, las estáticas write(...) y read(...) métodos son suficientes, si es necesario para controlar la compresión o manipular los datos de imagen del meta, echa un vistazo a la Java Image I/O API Guide.

+0

tengo JPEGS que no leen correctamente con ImageIO pero muy bien con las viejas clases sol (CMYK, etc ..) –

+2

En CMYK, este otro SO respuesta podría ayudar: http://stackoverflow.com/a/2408779/180740 –

+0

Sí lo hizo. Gracias –

15

Las clases de los paquetes com.sun. ** no se deben utilizar nunca. Use ImageIO para codificar imágenes en bytes.

Lea el ImageIO tutorial.

+4

ImageIO no puede en CMYK-JPEG. JPEGImageEncoder - can. – AvrDragon