Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298733
  • 博文数量: 65
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 284
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-21 15:10
文章分类
文章存档

2016年(3)

2015年(51)

2014年(8)

2013年(3)

分类: Java

2015-05-18 14:23:45

网站功能是必不可少的一个功能模块,然而我们不能就图片上传到服务器就不管了,而是要对图片等进行啊、加水印等处理。和大家分享下面这段代码,集成了对上传图片的缩放以及裁剪等处理。

 

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,tfix,x,y,width,height);
     
     return dst;
    }
    
    /**
     * 裁剪图片
     * @param input
     * @param 
     * @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(,type, f);  
         
  }


 /**
  * 上传头像文件
  * @param src
  * @param basepath
  * @param filename
  * @return
  * @throws Exception
  */
 public static String uploadImg(File ,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+"."+tfix;
  
  createDir(basepath +"/"+temppath);
  createDir (basepath +"/"+ thumbnailpath);
  
  
  String dstallpath = basepath +"/"+temppath+"/"+dsttempname;
  String dstthumbnailpath = basepath +"/"+thumbnailpath+"/"+dsttempname;
  
  copy(,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(), 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(+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);
         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;
    }
}

阅读(5339) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~