图片处理工具类

package com.o2o.util;

import java.io.File;
import java.io.IOException;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.imageio.ImageIO;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.o2o.dto.ImageHolder;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

public class ImageUtil {
    //定义通过当前线程逆推获取项目的根路径的全局变量
   private static String basepath = Thread.currentThread().getContextClassLoader().getResource("").getPath();    
   //定义全局日期格式
   private static final SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHHmmss");
   //定义全局随机数
   private static final Random r=new Random();
   //创建logger日志输出
   private final static Logger logger = LoggerFactory.getLogger(ImageUtil.class);
   
   

 //创建图片保存路径  
private static void makeDirPath(String targetAddr) {
    //获取图片的绝对路径
    String realFileParentPath=PathUtil.getImgBasePath()+targetAddr;
   //创建file对象
    File dirPath=new File(realFileParentPath);
   //判断路径是否存在,若不存在就创建
    if(!dirPath.exists()) {
        dirPath.mkdirs();
    }    
}

//生成年月日时分秒+5位随机数的字符串,作为图片的文件名
public static String getRandomFileName() {
      //获取五位随机数
      int rannum=r.nextInt(89999)+10000;
      //获取时间
      String nowTime=sf.format(new Date());
      //返回时间+随机数的文件名
      return nowTime+rannum;
}
//处理上传图片,生成水印缩略图并返回相对路径
public static String generateThumbnail(ImageHolder thumbnail,String targetAddr) {
       //获取自定义的文件名
       String realFileName=getRandomFileName();
       //调用自定义方法获取图片的格式,如.jpg
       String extension=getFileExtension(thumbnail.getImageName());
      //调用自定义方法创建图片路径
       makeDirPath(targetAddr);
      //拼接图片的相对路径
       String relativeAddr=targetAddr+realFileName+extension;
       logger.debug("current relativeAddr is:"+relativeAddr);
        //通过绝对路径获取file对象
       File dest=new File(PathUtil.getImgBasePath()+relativeAddr);
       logger.debug("current cpmplete addr is:"+PathUtil.getImgBasePath()+relativeAddr);
       try {
         //设置生成图片的大小,添加水印和压缩后保存到dest路径下
           Thumbnails.of(thumbnail.getImage()).size(200,200)
           .watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basepath+"/timg1.jpg")),0.25f)
           .outputQuality(0.8f).toFile(dest);
       }catch(IOException e) {
           logger.error(e.toString());
           e.printStackTrace();
       }
       return relativeAddr;
}
//获取上传图片的格式(如:.jpg)
private static String getFileExtension(String fileName) {
//    String originalFileName=cFileInputStream.getName();
    
    return fileName.substring(fileName.lastIndexOf("."));
}
//删除图片
public static void deleteFileOrPath(String storePath) {
    //获取绝对路径下的file对象
    File fileOrPath=new File(PathUtil.getImgBasePath()+storePath);
    //判断该file是否存在
     if(fileOrPath.exists()) {
       //判断fileOrPath是否表示目录
        if(fileOrPath.isDirectory()) {
            File files[]=fileOrPath.listFiles();
            for(int i=0;i<files.length;i++) {
                files[i].delete();
            }
        }
        fileOrPath.delete();
    }
 }
//处理和保存上传图片
public static String generateNormalImg(ImageHolder prImageHolder, String targetAddr) {
       String realFileName=getRandomFileName();
       String extension=getFileExtension(prImageHolder.getImageName());
       makeDirPath(targetAddr);
       String relativeAddr=targetAddr+realFileName+extension;
       logger.debug("current relativeAddr is:"+relativeAddr);
       File dest=new File(PathUtil.getImgBasePath()+relativeAddr);
       logger.debug("current cpmplete addr is:"+PathUtil.getImgBasePath()+relativeAddr);
       logger.debug("basePath is:"+basepath);
       try {
           Thumbnails.of(prImageHolder.getImage()).size(337,640)
           .watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basepath+"/timg1.jpg")),0.25f)
           .outputQuality(0.9f).toFile(dest);
       }catch(IOException e) {
           logger.error(e.toString());
           e.printStackTrace();
       }
       return relativeAddr;
}
}

 

 

posted on 2019-07-18 17:10  纵横余生  阅读(158)  评论(0)    收藏  举报

导航