pom.xml檔案中加載jar包(非maven項目直接下載下傳thumbnailator.jar放入項目路徑下的lib檔案中即可)
<!-- 圖檔處理 -->
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
建立class檔案 PathUtil.java
public class PathUtil {
private static String seperator = System.getProperty("file.separator");
public static String getImgBasePath() {
String os = System.getProperty("os.name");
String basePath = "";
//如果目前作業系統為Windows作業系統
if (os.toLowerCase().startsWith("win")) {
basePath = "D:/projectdev/image";
} else {
basePath = "/Users/baidu/work/image";
}
basePath = basePath.replace("/", seperator);
return basePath;
}
}
建立class檔案 ImageUtil.java
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.imooc.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 sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
private static final Random r = new Random();
private static Logger logger = LoggerFactory.getLogger(ImageUtil.class);
/**
* 将CommonsMultipartFile轉換成File類
*
* @param cFile
* @return
*/
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;
}
/**
* 處理縮略圖,并傳回新生成圖檔的相對值路徑
*
* @param thumbnail
* @param targetAddr
* @return
*/
public static String generateThumbnail(File thumbnail, String targetAddr) {
// 擷取不重複的随機名
String realFileName = getRandomFileName();
// 擷取檔案的擴充名如png,jpg等
String extension = getFileExtension(thumbnail);
// 如果目标路徑不存在,則自動建立
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);
logger.debug("basePath is :" + basePath);
// 調用Thumbnails生成帶有水印的圖檔
try {
Thumbnails.of(thumbnail).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());
throw new RuntimeException("建立縮略圖失敗:" + e.toString());
}
// 傳回圖檔相對路徑位址
return relativeAddr;
}
/**
* 建立目标路徑所涉及到的目錄,即/home/work/xiangze/xxx.jpg, 那麼 home work xiangze
* 這三個檔案夾都得自動建立
*
* @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(File file) {
return file.getName().substring(file.getName().lastIndexOf("."));
}
/**
* 生成随機檔案名,目前年月日小時分鐘秒鐘+五位随機數
*
* @return
*/
public static String getRandomFileName() {
// 擷取随機的五位數
int rannum = r.nextInt(89999) + 10000;
String nowTimeStr = sDateFormat.format(new Date());
return nowTimeStr + rannum;
}
/**
* storePath是檔案的路徑還是目錄的路徑, 如果storePath是檔案路徑則删除該檔案,
* 如果storePath是目錄路徑則删除該目錄下的所有檔案
*
* @param 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();
}
}
public static void main(String[] args) throws IOException {
//String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
Thumbnails.of(new File("E:/桌面檔案夾/swing 素材/btn/keybtn.png"))// 檔案路徑
.size(80, 50) // 圖檔大小
.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(basePath + "/watermark.jpg")), 0.25f)// 三個參數分别是 水印的位置,水印圖檔的路徑,透明度
.outputQuality(0.8f)// 壓縮圖檔的比例
.toFile("E:/桌面檔案夾/swing 素材/btn/keybtn2.png");//輸出路徑
}
}