/**
*
* @param file 文件
* @param path 上傳文件路徑
* @param folder 保存文件的文件夾
* @return 返回文件路徑
* @throws Exception
*/
public static String addWatermark(MultipartFile file, String path, String folder) throws Exception {
// 原圖位置, 輸出圖片位置, 水印文字顏色, 水印文字
// 讀取原圖片信息
Image srcImg = ImageIO.read(file.getInputStream());
int srcImgWidth = srcImg.getWidth(null);
int srcImgHeight = srcImg.getHeight(null);
// 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth,
srcImgHeight,
BufferedImage.TYPE_INT_RGB);
//獲取 Graphics2D 對象
Graphics2D g = bufImg.createGraphics();
//設置繪圖區域
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
//設置字體
Font font = new Font("宋體", Font.PLAIN, 40);
// 根據圖片的背景設置水印顏色
g.setColor(Color.green);
g.setFont(font);
//獲取文字長度
int len = g.getFontMetrics(
g.getFont()).charsWidth("圖片來源:戒菸的李白".toCharArray(),
0,
"圖片來源:戒菸的李白".length());
int x = srcImgWidth - len - 10;
int y = srcImgHeight - 20;
g.drawString("圖片來源:戒菸的李白", x, y);
g.dispose();
// 輸出圖片
String fileSrc = path + "/" + folder + "/" + UUIDUtils.getUUID() + ".jpg";
File waterFile = new File(path + "/" + folder);
if(!waterFile.exists()) waterFile.mkdirs();
FileOutputStream outImgStream = new FileOutputStream(fileSrc);
ImageIO.write(bufImg, "png", outImgStream);
outImgStream.flush();
outImgStream.close();
return fileSrc;
}