一些老的Java代碼在JDK1.7下編譯會報錯,好比這個:程序包com.sun.image.codec.jpeg不存在。java
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGImageEncoder類是SUN公司私有類
spa
通常出如今這樣的代碼段中:code
FileOutputStream out = new FileOutputStream(dstName); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(dstImage);
改寫成:
orm
String formatName = dstName.substring(dstName.lastIndexOf(".") + 1); //FileOutputStream out = new FileOutputStream(dstName); //JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); //encoder.encode(dstImage); ImageIO.write(dstImage, /*"GIF"*/ formatName /* format desired */ , new File(dstName) /* target */ );
都使用統一的ImageIO進行圖像格式文件的讀寫,沒有必要使用過期的實現類JPEGImageEncoder類。 圖片
private static ByteArrayInputStream convertImageToStream(BufferedImage image){ ByteArrayInputStream inputStream = null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ImageIO.write(image, "JPEG", bos); byte[] bts = bos.toByteArray(); inputStream = new ByteArrayInputStream(bts); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return inputStream; }
BufferedImage image = SecurityImage.createImage(securityCode, width, height); ServletOutputStream out = null; try { out = response.getOutputStream(); // 將圖片轉換爲JPEG類型 //JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); //encoder.encode(image); // 輸出圖象到頁面 ImageIO.write(image, "JPEG", response.getOutputStream()); out.flush(); //ServletActionContext.getPageContext().pushBody(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }