我在我的webapp中使用com.sun.image.codec.jpeg.JPEGImageEncoder
处理JPEG图像,如图表和其他图像。现在,我正在更新我的机器以使用JDK7,但是这个版本不赞成这个类。以下是我需要更改的代码:
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 :(得分:38)
使用ImageIO
,它可以开箱即用地读/写JPEG,PNG,GIF和BMP。
ImageIO.write(ChartImage, "jpeg", out);
通常静态write(...)
和read(...)
方法就足够了,如果您需要控制压缩或处理图片元数据,请查看Java Image I/O API Guide。
答案 1 :(得分:15)
永远不要使用com.sun。**包中的类。使用ImageIO将图像编码为字节。
答案 2 :(得分:0)
com.sun.image.codec.jpeg.JPEGImageEncoder 在 Java 8 中运行良好,但在 Java 11 中不起作用
在我的项目中,我使用的是 Java 8 并且我已经升级了 Java 11,这对我来说也是同样的问题。
我的代码是:
File output = new File(newFilename);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(output));
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
param.setQuality(1.0f, true);
encoder.setJPEGEncodeParam(param);
encoder.encode(bufferedImage);
我已经删除了上面的代码并用下面的代码替换它,现在它工作正常
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());