2011-11-04 48 views
33

私はcom.sun.image.codec.jpeg.JPEGImageEncoderを使用して、グラフなどのJPEG画像をWebアプリケーションで処理しています。今、JDK7を使うように私のマシンを更新していますが、このバージョンはこのクラスを非難しました。このコードでcom.sun.image.codec.jpeg.JPEGImageEncoderを置き換える方法は?

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

こんにちは、この画像変換に使用しているライブラリのバージョンを共有してください。同じ問題に直面していますが、ライブラリの問題があります.Maven依存関係を共有するとうまくいくでしょう。 – NoNaMe

答えて

37

使用ImageIO、それは箱から出し/書き込みJPEG、PNG、GIF、およびBMPを読み取ることができます。以下は、私は変更する必要があるコードがあります。あなたが圧縮を制御したり、画像のメタデータを扱う、Java Image I/O API Guideをチェックアウトする必要がある場合

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

は、通常、静的write(...)read(...)方法は、十分にあります。

+0

ImageIOで正しく読み込まれていないが、古い太陽のクラス(CMYKなど)で正常に読み取られないJPEGを持っています –

+2

CMYKの場合、この他のSOの答えが役に立ちます:http://stackoverflow.com/a/2408779/180740 –

+0

はい、そうでした。ありがとうございます –

15

com.sun。**パッケージのクラスは決して使用しないでください。イメージをバイトにエンコードするには、ImageIOを使用します。

ImageIO tutorialをお読みください。

+4

ImageIOはCMYK-JPEGにできません。 JPEGImageEncoder - できます。 – AvrDragon

関連する問題