/**
* 根據(jù)目標(biāo)路徑解碼源文件
*/
private static BufferedImage decodeIn(String targetFilePath) throws Exception{
//解碼當(dāng)前JPEG數(shù)據(jù)流傲绣,返回BufferedImage對(duì)象
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");
//轉(zhuǎn)換jpeg后進(jìn)行處理
if(!extName.toLowerCase().equals("bmp")){
toJPG(targetFilePath, jpegPath);
}else{
bmpTojpg(targetFilePath, jpegPath);
}
FileInputStream jpegIs = new FileInputStream(jpegPath);
//執(zhí)行到下面這段代碼就卡著沒(méi)有任何的反應(yīng) 圖片也沒(méi)有生成
// JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(jpegIs);
// buffImg = jpegDecoder.decodeAsBufferedImage();
//使用這段代碼代替上面的兩行代碼
buffImg = ImageIO.read(jpegIs);
return buffImg;
}
/**
* 根據(jù)輸出路徑編碼目標(biāo)文件
*/
private static void encodeOut(String beWaterMarkFilePath,BufferedImage buffImg){
OutputStream os = null;
try {
os = new FileOutputStream(beWaterMarkFilePath);
//創(chuàng)鍵編碼器化焕,用于編碼內(nèi)存中的圖象數(shù)據(jù)。
//執(zhí)行到下面這段代碼就卡著沒(méi)有任何的反應(yīng) 圖片也沒(méi)有生成
// 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流關(guān)閉異常");
}
}
}
--------------------------------------------------------------------
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);**
現(xiàn)在項(xiàng)目中用到的生成jpeg的包 com.sun.image.codec.jpeg.JPEGCodec 是sun公司的私有實(shí)現(xiàn)的洋措,現(xiàn)在過(guò)時(shí)了厅克,導(dǎo)致下載失敗
解決方法魏割,使用 ImageIO 進(jìn)行圖像格式文件的讀寫