图片处理工具类
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; } }