这个是ImageUtil
package com.imooc.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 net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.imooc.o2o.dto.ImageHolder;
public class ImageUtil {
private static String basePath=PathUtil.getImgBasePath();
private static final SimpleDateFormat sDateFormat=new SimpleDateFormat("yyyyMMddHHmmss");
private static final Random r=new Random();
private static Logger logger=LoggerFactory.getLogger(ImageUtil.class);
/*
* 将CommonsMultipartFile转换成File类型
*/
public static File transferCommonsMultipartFileToFile(CommonsMultipartFile cFile){
File newFile=new File(cFile.getOriginalFilename());
try {
cFile.transferTo(newFile);
} catch (IllegalStateException e) {
logger.error(e.toString());
e.printStackTrace();
} catch (IOException e) {
logger.error(e.toString());
e.printStackTrace();
}
return newFile;
}
/*
* 处理缩略图,并返回新生成图片的相对值路径
*/
public static String generateThumbnail(ImageHolder thumbnail,String targetAddr){
String realFileName=getRandomFileName();
String extension=getFileExtension(thumbnail.getImageName());
makeDirPath(targetAddr);
String relativeAddr=targetAddr+realFileName+extension;
logger.debug("current relativeAddr is:"+relativeAddr);
File dest=new File(PathUtil.getImgBasePath()+relativeAddr);
logger.debug("current complete addr is:"+PathUtil.getImgBasePath()+relativeAddr);
try{
Thumbnails.of(thumbnail.getImage()).size(200, 200)
.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basePath+"/watermark.jpg")),0.25f)
.outputQuality(0.8f).toFile(dest);
}catch(IOException e){
logger.error(e.toString());
e.printStackTrace();
}
return relativeAddr;
}
/**
* 处理详情图,并返回新生成图片的相对值路径
* @param thumbnail
* @param targetAddr
* @return
*/
public static String generateNormalImg(ImageHolder thumbnail,String targetAddr){
String realFileName=getRandomFileName();
String extension=getFileExtension(thumbnail.getImageName());
makeDirPath(targetAddr);
String relativeAddr=targetAddr+realFileName+extension;
logger.debug("current relativeAddr is:"+relativeAddr);
File dest=new File(PathUtil.getImgBasePath()+relativeAddr);
logger.debug("current complete addr is:"+PathUtil.getImgBasePath()+relativeAddr);
try{
Thumbnails.of(thumbnail.getImage()).size(337,640)
.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basePath+"/watermark.jpg")),0.25f)
.outputQuality(0.9f).toFile(dest);
}catch(IOException e){
logger.error(e.toString());
e.printStackTrace();
}
return relativeAddr;
}
/*
* 创建目标路径所涉及到的目录,即D:Maven/home/work/hjz/xxx.jpg,
* 那么home work hjz这三个文件夹都得自动创建
* @param targetAddr
*/
private static void makeDirPath(String targetAddr) {
String realFileParentPath=PathUtil.getImgBasePath()+targetAddr;
File dirPath=new File(realFileParentPath);
if(!dirPath.exists()){
dirPath.mkdirs();
}
}
/*
* 获取输入文件流的扩展名
* @param thumbnail
* @return
*/
private static String getFileExtension(String fileName) {
return fileName.substring(fileName.lastIndexOf("."));
}
/*
* 生成随机文件名,当前年月日小时分钟秒钟+五位随机数
* @return
*/
public static String getRandomFileName(){
//获取随机的五位数
int rannum=r.nextInt(89999)+10000;
String nowTimeStr=sDateFormat.format(new Date());
return nowTimeStr+rannum;
}
public static void main(String[] args) throws IOException {
String basePath = Thread.currentThread().getContextClassLoader()
.getResource("").getPath();
Thumbnails
.of(new File("D:/Maven/image/hero.jpg"))
.size(200, 200)
.watermark(Positions.BOTTOM_RIGHT,
ImageIO.read(new File(basePath + "watermark.jpg")),
0.25f).outputQuality(0.8f)
.toFile("D:/Maven/image/newhero.jpg");
}
/*
* storePath是文件的路劲还是目录的路径
* 如果storePath是文件路径则删除改文件
* 如果storePath是目录路径则删除该目录下的所有文件
*/
public static void deleteFileOrPath(String storePath){
File fileOrPath=new File(PathUtil.getImgBasePath()+storePath);
if(fileOrPath.exists()){
if(fileOrPath.isDirectory()){
File files[]=fileOrPath.listFiles();
for(int i=0;i<files.length;i++){
files[i].delete();
}
fileOrPath.delete();
}
}
}
}
SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需
了解课程