java 图片添加水印(文字水印+图片水印)
一、图片水印(水印文件覆盖到源文件上)
/**
* @param buffImg 源文件(BufferedImage)
* @param waterImg 水印文件(BufferedImage)
* @param x X偏移量
* @param y Y偏移量
* @param alpha 透明度, 选择值从0.0~1.0: 完全透明~完全不透明
* @return BufferedImage
* @throws IOException
* @Title: 构造图片
* @Description: 生成水印并返回java.awt.image.BufferedImage
*/
public static BufferedImage overlyingImage(BufferedImage buffImg, BufferedImage waterImg, int x, int y, float alpha) throws IOException {
// 创建Graphics2D对象,用在底图对象上绘图
Graphics2D g2d = buffImg.createGraphics();
int waterImgWidth = waterImg.getWidth();// 获取层图的宽度
int waterImgHeight = waterImg.getHeight();// 获取层图的高度
// 在图形和图像中实现混合和透明效果
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 绘制
g2d.drawImage(waterImg, x, y, waterImgWidth, waterImgHeight, null);
g2d.dispose();// 释放图形上下文使用的系统资源
return buffImg;
}
效果图:
源文件(buffImg):
水印文件(waterImg):
最后效果:
根据需要设置透明度、旋转角度、铺满样式
二、文字水印(由于要设置旋转效果,所以为了让展示效果铺满整个图片,所以x和y的偏移量取负数,效果好看些)
/** 文字水印
* @param buffImg 源文件(BufferedImage)
* @param x X偏移量
* @param y Y偏移量
* @param alpha 透明度, 选择值从0.0~1.0: 完全透明~完全不透明
* @return BufferedImage
* @throws IOException
* @Title: 构造图片
* @Description: 生成水印并返回java.awt.image.BufferedImage
*/
public static BufferedImage overlyingImageFont(BufferedImage buffImg, int x, int y, float alpha) throws IOException {
// 创建Graphics2D对象,用在底图对象上绘图
Graphics2D g = buffImg.createGraphics();
// 3、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//设置旋转(旋转角度,旋转x轴定点,y轴定点)
g.rotate(Math.toRadians(45),
0D,
0D);
Font font = new Font("宋体", Font.BOLD, 20);
//设置字体
g.setFont(font);
//设置颜色
g.setColor(Color.GRAY);
// 设置透明效果
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
/**开始平铺界面*/
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
y+=150;
g.drawString("我是文字内容", x, y);
}
x+=150;
y=0;
}
g.dispose();// 释放图形上下文使用的系统资源
return buffImg;
}
效果图:
源文件(buffImg):
最后效果:
还没有评论,来说两句吧...