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;
}
}