/***
* 修改图片大小
*
描述
* @date 2014-7-10 下午4:27:51
*@version*@paramsrcFilePath
*@paramfileExtName
*@return*@throwsIOException*/
public static boolean compressPic(String srcFilePath,String fileExtName) throwsIOException {
File file= null;
BufferedImage src= null;
FileOutputStream out= null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;long start1 =System.currentTimeMillis();//指定写图片的方式为 jpg
imgWrier =ImageIO.getImageWritersByFormatName(fileExtName).next();
imgWriteParams=imgWrier.getDefaultWriteParam();//imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(//null);//imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(//null);
imgWriteParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);//这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float) 0.2);//imgWriteParams.setProgressiveMode(ImageWriteParam.MODE_DISABLED);// ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();//ColorModel.getRGBdefault();//指定压缩时使用的色彩模式
imgWriteParams.setDestinationType(newjavax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16)));long end1 =System.currentTimeMillis();
System.out.println("11111消耗时间:"+((double)end1-(double)start1)/1000+"秒");try{if(isBlank(srcFilePath)) {return false;
}else{
file= newFile(srcFilePath);
src=ImageIO.read(file);
out= newFileOutputStream(srcFilePath);
System.out.println("22222");
imgWrier.reset();//必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何//OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
System.out.println("3333333");//调用write方法,就可以向输入流写图片
long start4 =System.currentTimeMillis();
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);long end4 =System.currentTimeMillis();
System.out.println("4444消耗时间:"+((double)end4-(double)start4)/1000+"秒");
src.flush();
out.flush();
out.close();
imgWrier.dispose();
}
}catch(Exception e) {
e.printStackTrace();return false;
}return true;
}/***
* 修改单独图片大小
*
描述
* @date 2014-7-10 下午4:26:30
*@version*@paramfilePath
*@paramcreateType
*@throwsException*/
public static void changeNoneImgSize(String filePath,String createType) throwsException
{
File tempFile= newFile(filePath);if(tempFile.length()>ImagesUtils.IMAGEMAXSIZE){long start =System.currentTimeMillis();
compressPic(filePath,createType);long end =System.currentTimeMillis();
System.out.println(filePath+"消耗时间:"+((double)end-(double)start)/1000+"秒");
}
}/***
* 修改多个图片大小
*
描述
* @date 2014-7-10 下午4:26:52
*@version*@paramfile
*@throwsException*/
public static void changeManyImgSize(File file) throwsException
{try{//判断文件是否是文件,如果是文件,获取路径,并计数
if(file.isFile()) {
String fileExtName=file.getName().substring(
(file.getName().lastIndexOf(".") + 1), file.getName().length());if(ImagesUtils.isImageFile(fileExtName))
changeNoneImgSize(file.getAbsolutePath(), fileExtName);//ImagesUtils.changeImgSize(file.getAbsolutePath(), ImagesUtils.CREATENEWIMAGETYPE_6);
} else{//如果是文件夹,声明一个数组放文件夹和他的子文件
File[] f =file.listFiles();//遍历文件件下的文件,并获取路径
for(File file2 : f) {
changeManyImgSize(file2);
}
}
}catch(RuntimeException e) {
e.printStackTrace();
}
}