一些老的Java代码在JDK1.7下编译会报错,比如这个:程序包com.sun.image.codec.jpeg不存在。
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGImageEncoder类是SUN公司私有类
一般出现在这样的代码段中:
FileOutputStream out = new FileOutputStream(dstName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(dstImage);
改写成:
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();
}