web-dev-qa-db-fra.com

Comment remplacer com.Sun.image.codec.jpeg.JPEGImageEncoder dans ce code?

J'ai utilisé com.Sun.image.codec.jpeg.JPEGImageEncoder pour gérer les images JPEG, comme les graphiques et autres, dans ma webapp. Maintenant, je mets à jour ma machine pour utiliser JDK7, mais cette version a déconseillé cette classe. Voici le code que je dois changer:

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;
}
35
Edilmar Alves

Utilisez ImageIO , il peut lire/écrire JPEG, PNG, GIF et BMP hors de la boîte.

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

Habituellement, les méthodes statiques write(...) et read(...) sont suffisantes, si vous avez besoin de contrôler la compression ou de gérer les métadonnées d'image, consultez le Java API I/O API Guide =.

39
Philipp Reichart

Les classes des packages com.Sun. ** ne doivent jamais être utilisées. Utilisez ImageIO pour coder les images en octets.

Lisez le tutoriel ImageIO .

15
JB Nizet