使用Graphics2D给图片加水印(图片+图标)
需求:将图片与水印图标进行结合,并可控制水印出现位置
代码:
//图片合成
public static void main(String[] args) {
//底图
String img1 = "C:\\Users\\able\\Desktop\\图片\\timg (1).jpg";
//覆盖图
String img2 = "C:\\Users\\able\\Desktop\\图片\\2.png";
String serverUploadImgUrl = "D:"; // 图片保存路径
try {
BufferedImage bufferedImage = coverImage(img1, img2, 3);
String imgName = new Date().getTime() + ".jpg"; //生成的图片名称
File newFile = new File(serverUploadImgUrl, imgName); //生成新的图片
// 此处要写PNG否则可能会出现遮罩层
ImageIO.write(bufferedImage, "png", newFile);
} catch (Exception e) {
}
}
public static BufferedImage coverImage(String baseFilePath, String coverFilePath, Integer type) throws Exception {
File baseFile = new File(baseFilePath);//底图
BufferedImage buffImg = ImageIO.read(baseFile);
File coverFile = new File(coverFilePath); //覆盖层
BufferedImage coverImg = ImageIO.read(coverFile);
int x = 0;
int y = 0;
int width = coverImg.getWidth();
int height = coverImg.getHeight();
if (type == 1) {
//覆盖图片位于左上角
x = 0;
y = 0;
} else if (type == 2) {
//覆盖图片位于右上角
x = buffImg.getWidth() - width;
y = 0;
} else if (type == 3) {
//覆盖图片位于左下角
x = 0;
y = buffImg.getHeight() - height;
} else if (type == 4) {
//覆盖图片位于右下角
x = buffImg.getWidth() - width;
y = buffImg.getHeight() - height;
}
buffImg = coverImage(buffImg, coverImg, x, y, width, height);
return buffImg;
}
/*
* 图片覆盖(覆盖图压缩到width*height大小,覆盖到底图上)
*
* @param baseBufferedImage 底图
* @param coverBufferedImage 覆盖图
* @param x 起始x轴
* @param y 起始y轴
* @param width 覆盖宽度
* @param height 覆盖长度度
* @return
* @throws Exception
*/
public static BufferedImage coverImage(
BufferedImage baseBufferedImage, BufferedImage coverBufferedImage, int x, int y, int width, int height) throws Exception {
// 创建Graphics2D对象,用在底图对象上绘图
Graphics2D g2d = baseBufferedImage.createGraphics();
// 绘制
g2d.drawImage(coverBufferedImage, x, y, width, height, null);
g2d.dispose();// 释放图形上下文使用的系统资源
return baseBufferedImage;
}