上传图片进行压缩保存

使用apache上传类进行上传

///工具类处理

package com.it.comm;



import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


import javax.imageio.ImageIO;


import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


/**
 * TODO 图片等比压缩的工具方法
 * @author 
 * @since  
 */
public class CompressImageUtils {



/**
* 输出图片的宽
*/
private  int  outputWidth=200;
/**
* 输出图片的高
*/
private int outputHeight=150;

/**
* 是否等比缩放
*/
boolean proportion =true;

public CompressImageUtils(int targetWidth,int targetHeight,boolean proportion){
this.outputHeight = targetHeight;
this.outputWidth = targetWidth;
this.proportion = proportion;
}
public CompressImageUtils(){


}


public void compressImage(InputStream srcStream,File tagFile){
Image srcImg = null;
FileOutputStream out = null;
try {
srcImg = ImageIO.read(srcStream);
int newWidth; 
int newHeight;
       // 判断是否是等比缩放   
       if (proportion == true) {   
           // 为等比缩放计算输出的图片宽度及高度   
           double rate1 = ((double) srcImg.getWidth(null)) / (double) outputWidth + 0.1;   
           double rate2 = ((double) srcImg.getHeight(null)) / (double) outputHeight + 0.1;   
           // 根据缩放比率大的进行缩放控制   
           double rate = rate1 > rate2 ? rate1 : rate2;   
           newWidth = (int) (((double) srcImg.getWidth(null)) / rate);   
           newHeight = (int) (((double) srcImg.getHeight(null)) / rate);   
       } else {   
           newWidth = outputWidth; // 输出的图片宽度   
           newHeight = outputHeight; // 输出的图片高度
       }   

       BufferedImage tagImg = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB); 
       
       /* 
        * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 
        * 优先级比速度高 生成的图片质量比较好 但速度慢 
        */   


       tagImg.getGraphics().drawImage(srcImg.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);  
       out = new FileOutputStream(tagFile);  
       // JPEGImageEncoder可适用于其他图片类型的转换   
       JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
       encoder.encode(tagImg);   
       out.close(); 
} catch (IOException e) {
ExceptionHandler.logException(e);
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
ExceptionHandler.logException(e);
}
}
}

}


}


servlet中获取上传文件对象


DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(512);
File file = new File("c:\\1.jpg");
PathUtil.makeDirs(file);
factory.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setSizeMax(512);

List items = upload.parseRequest(request);

for(FileItem item : items){

writeFile(item,new Flie("c:\\test\\"+System.currentTimeMillis()+".jpg"));

}

//


private void writeFile(FileItem item, File uploadedFile) throws UploadException {
try {
//缩略图生成在您是文件生成
int outputWidth = 640;
int outputHeight = 480;
//大于5M的时候进行等比缩放

InputStream in = item.getInputStream();
if(item.getSize()>1024*1024*5){
File srcFile = new File(item.getName());
CompressImageUtils comprerssImage = new CompressImageUtils(outputWidth,outputHeight,true);
comprerssImage.compressImage(in , uploadedFile);


}else{
item.write(uploadedFile);
}
} catch (Exception e) {

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值