公共代码之图片上传压缩处理

我们在项目中经常会出现图片的上传、压缩处理的情况,例如等比例压缩、按照一定的宽度和高度压缩等,公共代码如下:

package com.repair.common.util;  import java.awt.Image;  import java.awt.image.BufferedImage;  import java.io.File;  import java.io.FileNotFoundException;  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.JPEGEncodeParam;  import com.sun.image.codec.jpeg.JPEGImageEncoder;    public class ImageZipUtil {    	/**  	 * 等比例压缩图片文件<br> 先保存原文件,再压缩、上传  	 * @param oldFile  要进行压缩的文件  	 * @param newFile  新文件  	 * @param width  宽度 //设置宽度时(高度传入0,等比例缩放)  	 * @param height 高度 //设置高度时(宽度传入0,等比例缩放)  	 * @param quality 质量  	 * @return 返回压缩后的文件的全路径  	 */  	public static String zipImageFile(File oldFile,File newFile, int width, int height,  			float quality) {  		if (oldFile == null) {  			return null;  		}  		try {  			/** 对服务器上的临时文件进行处理 */  			Image srcFile = ImageIO.read(oldFile);  			int w = srcFile.getWidth(null);  		//	System.out.println(w);  			int h = srcFile.getHeight(null);  		//	System.out.println(h);  			double bili;  			if(width>0){  				bili=width/(double)w;  				height = (int) (h*bili);  			}else{  				if(height>0){  					bili=height/(double)h;  					width = (int) (w*bili);  				}  			}  			/** 宽,高设定 */  			BufferedImage tag = new BufferedImage(width, height,  					BufferedImage.TYPE_INT_RGB);  			tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);  			//String filePrex = oldFile.getName().substring(0, oldFile.getName().indexOf('.'));  			/** 压缩后的文件名 */  			//newImage = filePrex + smallIcon+  oldFile.getName().substring(filePrex.length());    			/** 压缩之后临时存放位置 */  			FileOutputStream out = new FileOutputStream(newFile);    			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  			JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);  			/** 压缩质量 */  			jep.setQuality(quality, true);  			encoder.encode(tag, jep);  			out.close();    		} catch (FileNotFoundException e) {  			e.printStackTrace();  		} catch (IOException e) {  			e.printStackTrace();  		}  		return newFile.getAbsolutePath();  	}    	/**  	 * 按宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传  	 * @param oldFile  要进行压缩的文件全路径  	 * @param newFile  新文件  	 * @param width  宽度  	 * @param height 高度  	 * @param quality 质量  	 * @return 返回压缩后的文件的全路径  	 */  	public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,  			float quality) {  		if (oldFile == null) {  			return null;  		}  		String newImage = null;  		try {  			/** 对服务器上的临时文件进行处理 */  			Image srcFile = ImageIO.read(oldFile);  			int w = srcFile.getWidth(null);  		//	System.out.println(w);  			int h = srcFile.getHeight(null);  		//	System.out.println(h);    			/** 宽,高设定 */  			BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  			tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);  			//String filePrex = oldFile.substring(0, oldFile.indexOf('.'));  			/** 压缩后的文件名 */  			//newImage = filePrex + smallIcon+ oldFile.substring(filePrex.length());    			/** 压缩之后临时存放位置 */  			FileOutputStream out = new FileOutputStream(newFile);    			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  			JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);  			/** 压缩质量 */  			jep.setQuality(quality, true);  			encoder.encode(tag, jep);  			out.close();  		} catch (FileNotFoundException e) {  			e.printStackTrace();  		} catch (IOException e) {  			e.printStackTrace();  		}  		return newImage;  	}  
         //测试          	public static void main(String args[]) throws IOException {  		//System.out.println(ImageZipUtil.zipWidthHeightImageFile(new File("E:/c.jpg"),new File("E:/c2.jpg"), 120, 128, 3f));  	}  }  

你可能感兴趣的:(String,File,服务器,null,Class,float)