您的位置:首页 > 其它

上传图片进行压缩保存

2012-12-12 16:51 495 查看
使用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) {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐