- import java.awt.Container;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.Rectangle;
- import java.awt.RenderingHints;
- import java.awt.Toolkit;
- import java.awt.image.BufferedImage;
- import java.awt.image.CropImageFilter;
- import java.awt.image.FilteredImageSource;
- import java.awt.image.ImageFilter;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.UUID;
- 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 FileUploadUtils {
- /**
- * 裁剪图片
- * @param input
- * @param basepath
- * @param uid
- * @param x
- * @param y
- * @param width
- * @param height
- * @return 绝对路径
- * @throws IOException
- */
- public static String cutImg(String input,String basepath,int x,int y,int width,int height) throws IOException{
- String path2 = basepath+"/"+ConstantUtils.USERFACETEMPPATH;
- String postfix = getPostfix(input);
- String dst = path2 +"/"+UUID.randomUUID().toString()+"."+postfix;
- createDir(path2);
- imgCut(basepath+input,dst,postfix,x,y,width,height);
- return dst;
- }
- /**
- * 裁剪图片
- * @param input
- * @param src
- * @param x
- * @param y
- * @param width
- * @param height
- * @throws IOException
- */
- public static void imgCut(String input,String dst,String type,int x,int y,int width,int height) throws IOException
- {
- BufferedImage fromimg = ImageIO.read(new File(input));
- ImageFilter cropFilter = new CropImageFilter(x,y,width,height);
- Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(fromimg.getSource(), cropFilter));
- BufferedImage tag = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
- Graphics g = tag.getGraphics();
- g.drawImage(img, 0, 0, null); // 绘制小图
- g.dispose();
- // 输出为文件
- // dir = "d:\\temp\\cut_image_" + i + "_" + j + ".jpg";
- File f = new File(dst);
- ImageIO.write(tag,type, f);
- }
- /**
- * 上传头像文件
- * @param src
- * @param basepath
- * @param filename
- * @return
- * @throws Exception
- */
- public static String uploadImg(File src,String basepath,String filename) throws Exception{
- String daypath = DateTools.getYear() + "" + DateTools.getMonth() + "" + DateTools.getMonthWeek();
- String temppath = ConstantUtils.BASEUPLOADPATH+"/"+ConstantUtils.ORIGINALIMGPATH+"/" + daypath;
- String thumbnailpath = ConstantUtils.BASEUPLOADPATH+"/"+ConstantUtils.THUMBNAILIMGPATH+"/" + daypath;
- String postfix = getPostfix(filename);
- String uuid = UUID.randomUUID().toString();
- String dsttempname = uuid+"."+postfix;
- createDir(basepath +"/"+temppath);
- createDir (basepath +"/"+ thumbnailpath);
- String dstallpath = basepath +"/"+temppath+"/"+dsttempname;
- String dstthumbnailpath = basepath +"/"+thumbnailpath+"/"+dsttempname;
- copy(src,new File(dstallpath));
- //对上传的文件进行 等比例 裁剪。 按照前段要展现的 height width
- Thumbnail(dstallpath,dstthumbnailpath,350,300,100);
- //返回裁剪后的路径
- return thumbnailpath+"/"+dsttempname;
- }
- /**
- * 上传文件
- * @param src
- * @param dst
- * @throws Exception
- */
- public static void copy(File src, File dst) throws Exception {
- try {
- InputStream in = null;
- OutputStream out = null;
- try {
- in = new BufferedInputStream(new FileInputStream(src), ConstantUtils.BUFFER_SIZE);
- out = new BufferedOutputStream(new FileOutputStream(dst), ConstantUtils.BUFFER_SIZE);
- byte[] buffer = new byte[ConstantUtils.BUFFER_SIZE];
- while (in.read(buffer) > 0) {
- out.write(buffer);
- }
- } finally {
- if (null != in) {
- in.close();
- }
- if (null != out) {
- out.close();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw e;
- }
- }
- /**
- * 得到文件后缀 jpg
- * @param fileName
- * @return
- */
- public static String getPostfix(String fileName){
- if (fileName.equals(""))
- return "";
- int pos = fileName.lastIndexOf(".");
- if (pos < 0) {
- return fileName.substring(fileName.length() - 3).toLowerCase();
- } else {
- return fileName.substring(pos+1).toLowerCase();
- }
- }
- /**
- * 创建目录
- * @param filePath
- */
- public static void createDir(String filePath) {
- File myFile = new File(filePath);
- if (!myFile.exists()) {
- if (!myFile.mkdirs())
- System.out.println("创建目录 fail");
- else
- System.out.println("创建目录 success");
- }
- myFile = null;
- }
- /**
- * 等比例缩放图片
- * @param infile
- * @param outfile
- * @param width
- * @param height
- * @param quality
- * @throws IOException
- * @throws InterruptedException
- */
- public static void Thumbnail(String infile, String outfile, int width, int height, int quality) throws IOException, InterruptedException {
- // save thumbnail image to OUTFILE
- //System.out.println("infile:" + infile);
- BufferedImage thumbImage = null;
- BufferedOutputStream out = null;
- Image image = null;
- image = Toolkit.getDefaultToolkit().createImage(infile);
- MediaTracker mediaTracker = new MediaTracker(new Container());
- mediaTracker.addImage(image, 0);
- mediaTracker.waitForID(0);
- int thumbWidth = width;
- int thumbHeight = height;
- double thumbRatio = (double) thumbWidth / (double) thumbHeight;
- int imageWidth = image.getWidth(null);
- int imageHeight = image.getHeight(null);
- double imageRatio = (double) imageWidth / (double) imageHeight;
- if (thumbRatio < imageRatio) {
- thumbHeight = (int) (thumbWidth / imageRatio);
- } else {
- thumbWidth = (int) (thumbHeight * imageRatio);
- }
- thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
- Graphics2D graphics2D = thumbImage.createGraphics();
- graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
- graphics2D.drawImage(image,0,0, thumbWidth, thumbHeight, null);
- out = new BufferedOutputStream(new FileOutputStream(outfile));
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
- quality = Math.max(0, Math.min(quality, 100));
- param.setQuality((float) quality / 100.0f, false);
- encoder.setJPEGEncodeParam(param);
- encoder.encode(thumbImage);
- out.close();
- thumbImage = null;
- out = null;
- image = null;
- }
- }
来源: http://www.phpxs.com/code/1001533/