How to replace com.sun.image.codec.jpeg.JPEGImageEncoder in this code?

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

I have used com.sun.image.codec.jpeg.JPEGImageEncoder to handle JPEG images, like charts and others, in my webapp. Now, I am updating my machine to use JDK7, but this version deprecated this class. Below is the code that I need to change:

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; } 

回答1:

Use ImageIO, it can read/write JPEG, PNG, GIF, and BMP out of the box.

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

Usually the static write(...) and read(...) methods are enough, if you need to control compression or handle image meta data, check out the Java Image I/O API Guide.



回答2:

Classes from the com.sun.** packages should never be used. Use ImageIO to encode images into bytes.

Read the ImageIO tutorial.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!