2011-11-04 5 views
33

Ho usato com.sun.image.codec.jpeg.JPEGImageEncoder per gestire immagini JPEG, come grafici e altri, nella mia webapp. Ora sto aggiornando la mia macchina per usare JDK7, ma questa versione ha deprecato questa classe. Di seguito è riportato il codice che ho bisogno di cambiare:Come sostituire com.sun.image.codec.jpeg.JPEGImageEncoder in questo codice?

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

Ciao, puoi condividere la versione della libreria che stai usando per questa conversione di immagine, sto affrontando lo stesso problema ma guardando qualche problema di libreria, sarà fantastico se condividi la dipendenza da parte di Maven. – NoNaMe

risposta

37

Usa ImageIO, può leggere/scrivere JPEG, PNG, GIF, BMP e fuori dalla scatola.

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

Di solito le statiche write(...) e read(...) metodi sono abbastanza, se avete bisogno di controllare la compressione o gestire i metadati di immagine, controlla la Java Image I/O API Guide.

+0

Possiedo JPEG che non vengono letti correttamente con ImageIO, ma con le vecchie classi sun (CMYK, ecc.) –

+2

Per CMYK, questa altra risposta SO può aiutare: http://stackoverflow.com/a/2408779/180740 –

+0

Sì, l'ha fatto. Grazie –

15

Le classi dai pacchetti com.sun. ** non devono mai essere utilizzate. Utilizzare ImageIO per codificare le immagini in byte.

Leggere il ImageIO tutorial.

+4

ImageIO non in CMYK-JPEG. JPEGImageEncoder - can. – AvrDragon