校园商铺中对于图片处理,封装了一个工具类,该类主要对图片进行重命名,以及对图片增加水印。
一、路径管理工具类
该类主要的作用主要是为了生成图片保存的相对地址,以及获取获取图片的根目录。
1.首先是根据系统获取图片保存的绝对路径
不同的系统绝对路径也不同,因此,需要根据不同的系统,生成不同的绝对路径
//获取系统路径分隔符
private static String seperator = System.getProperty("file.seperator");
private static String getImgBasePath(){
String osName = System.getProperty("os.name");
String basePath = "";
if(osName.startWith("win")){
//此时为windows系统
basePath = "D:/projectDev/Img/"
}else{
basePath = "/home/us/image/";
}
basePath.replace("/",seperator);
return basePath;
}
2.相对路径的处理
相对路径:此时,所有的图片都存在相对目录下,只是最后一层目录,根据店铺Id的不同,来存放各个店铺的图片。
private static String getShopImgPath(long shopId){
String shopImgPath = "upload/item/shop/" + shopId +"/";
return shopImgPath.replace("/",seperator);
}
二、图片处理类
图片处理类主要是对图片进行重命名,并添加水印
1.图片的重命名
图片名需要采用 当前时间+5位随机数+后缀名
//获取5位随机数,获取当前日期,拼接
private static String getRandomFileName(){
Random random = new Random();
int str = random.nextInt(89999)+10000;
String nowTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
return nowTime+str;
}
private static String getExtension(String fileName){
return file.subString(fileName.lastIndexOf("."));
}
至此,获取随机数和后缀名的方法已经完毕,接下来就是图片的处理。本项目用到了加水印。
水印获取:通过类加载器到根目录获取静态资源
basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
private static String generateThumbnail(ImageHolder thumbnail, String targetAddr){
//ImageHolder 为封装的类,存文件名和文件流
//targetAddr为相对路径
String randomName = getRandomFileName();
String extensionName = getExtension();
//检查是否存在目录,如果不存在创建
makeDirs(targetAddr);
String realFileName = targetName + randomName + extensionName;
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) {
e.printStackTrace();
}
}
private void makeDirs(String s){
File f = new File(PathUtil.getImgBasePath() + s);
if(!f.exsits){
f.mkdirs();
}
}