/**
* 根据目标路径解码源文件
*/
private static BufferedImage decodeIn(String targetFilePath) throws Exception{
//解码当前JPEG数据流,返回BufferedImage对象
BufferedImage buffImg = null;
String extName=FileUtil.getFileFormat(targetFilePath);
String fileName=FileUtil.getFileName(targetFilePath);
String fronName=FileUtil.getFrontName(fileName);
//文件路径
String jpegPath=targetFilePath.replace(fileName,fronName+".jpeg");
//转换jpeg后进行处理
if(!extName.toLowerCase().equals("bmp")){
toJPG(targetFilePath, jpegPath);
}else{
bmpTojpg(targetFilePath, jpegPath);
}
FileInputStream jpegIs = new FileInputStream(jpegPath);
//执行到下面这段代码就卡着没有任何的反应 图片也没有生成
// JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(jpegIs);
// buffImg = jpegDecoder.decodeAsBufferedImage();
//使用这段代码代替上面的两行代码
buffImg = ImageIO.read(jpegIs);
return buffImg;
}
/**
* 根据输出路径编码目标文件
*/
private static void encodeOut(String beWaterMarkFilePath,BufferedImage buffImg){
OutputStream os = null;
try {
os = new FileOutputStream(beWaterMarkFilePath);
//创键编码器,用于编码内存中的图象数据。
//执行到下面这段代码就卡着没有任何的反应 图片也没有生成
// JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
// en.encode(buffImg);
//使用这段代码代替上面的两行代码
ImageIO.write(buffImg,"jpeg",os);
} catch (Exception e) {
throw new BizException(BizCode.NOT_DEFINE_CODE,"FileNotFoundException水印文件"+beWaterMarkFilePath+"不存在!");
}finally{
try {
if(os!=null){
os.close();
}
} catch (IOException e) {
log.info("IO流关闭异常");
}
}
}
--------------------------------------------------------------------
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(jpegIs);
buffImg = jpegDecoder.decodeAsBufferedImage();
**替换成**
**buffImg = ImageIO.read(jpegIs);**
-----------------------------------------------------------------------
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(buffImg);
**替换成**
**ImageIO.write(buffImg,"jpeg",os);**
现在项目中用到的生成jpeg的包 com.sun.image.codec.jpeg.JPEGCodec 是sun公司的私有实现的,现在过时了,导致下载失败
解决方法,使用 ImageIO 进行图像格式文件的读写