public void addWaterMarkByResource(String resourcePath, String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y)
{
try {
System.out.println("addWaterMarkByResource");
// 讀取原圖片信息
var imageStream = this.getClass().getResourceAsStream(resourcePath);
Image srcImg = ImageIO.read(imageStream);//文件轉化爲圖片
System.out.println("讀取原圖成功");
addWaterMark(srcImg,tarImgPath,waterMarkContent,markContentColor,font,x,y);
} catch (Exception e) {
// TODO: handle exception
System.out.println("addWaterMarkByResource error:"+e.getLocalizedMessage());
}
}
/**
* @param srcImgPath 源圖片路徑
* @param tarImgPath 保存的圖片路徑
* @param waterMarkContent 水印內容
* @param markContentColor 水印顏色
* @param font 水印字體
*/
public void addWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y) {
try {
// 讀取原圖片信息
//this.getClass().getResourceAsStream("")
File srcImgFile = new File(srcImgPath);//得到文件
Image srcImg = ImageIO.read(srcImgFile);//文件轉化爲圖片
addWaterMark(srcImg,tarImgPath,waterMarkContent,markContentColor,font, x, y);
} catch (Exception e) {
// TODO: handle exception
System.out.println("addWaterMark1 error:"+e.getLocalizedMessage());
}
}
public void addWaterMark(Image srcImg,String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y)
{
try
{
System.out.println("addWaterMark111111111111");
if(srcImg==null)
{
System.out.println("addWaterMark srcImg is null");
}
int srcImgWidth = srcImg.getWidth(null);//獲取圖片的寬
int srcImgHeight = srcImg.getHeight(null);//獲取圖片的高
// 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
// 設置圖片背景色是透明的,否則生成的圖片可能會出現黑邊
bufImg = g.getDeviceConfiguration().createCompatibleImage(srcImgWidth,srcImgHeight,Transparency.TRANSLUCENT);
g.dispose();
g = bufImg.createGraphics();
//-------
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); //根據圖片的背景設置水印顏色
g.setFont(font); //設置字體
// 使文字顯示更清晰,否則文字可能模糊
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
System.out.println("setfont22222222");
//設置水印的座標
//int x = srcImgWidth - 2*getWatermarkLength(waterMarkContent, g);
//int y = srcImgHeight - 2*getWatermarkLength(waterMarkContent, g);
if(x==-1)
{
x = (srcImgWidth - getWatermarkLength(waterMarkContent, g))/2;
}
if(y==-1)
{
y = (srcImgHeight - getWatermarkHeight(waterMarkContent,g))/2;
}
g.drawString(waterMarkContent, x, y); //畫出水印
g.dispose();
System.out.println("tarImgPath:"+tarImgPath);
int c = tarImgPath.lastIndexOf("/");
var path = tarImgPath.substring(0,c+1);
System.out.println("temppath:"+path);
File imgFile=new File(path);
if (!imgFile.exists()){
System.out.println("addWaterMark 創建文件夾");
imgFile.mkdirs();
}
// 輸出圖片
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, "png", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
} catch (Exception e) {
// TODO: handle exception
System.out.println("addWaterMark2 error:"+e.getLocalizedMessage());
}
}
public int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
public int getWatermarkHeight(String waterMarkContent, Graphics2D g)
{
int p = g.getFontMetrics(g.getFont()).getHeight();
return p;
}
參考資料
用Java實現給圖片添加文字