今天尝试了一下图片上添加水印的实现,做出来感觉还是挺有意思的!特此跟大家分享一下,有什么更好的学习资源大家可以一起学习。
import mark.waterMarkUtils;
public class Main {
public static void main(String[] args) {
System.out.println("开始水印:");
new waterMarkUtils().addWatermark("C:/Users/pingan//Desktop/6.png", "C:/Users/pingan//Desktop/7.jpg", "水印文字根据自己需要填写", "jpg");
System.out.println("水印完成。");
}
/**
*
* @param sourceImgPath 需要画水印的图片的URL
* @param tarImgPath 输出画好水印图片的URL
* @param waterMarkContent 画水印的文字
* @param fileExt 输出的图片的格式(png,jpg等)
*
* @author *****
* @date 2019/5/28 15:45
*/
public void addWatermark(String sourceImgPath, String tarImgPath, String waterMarkContent, String fileExt) {
int radio = 60;
//水印颜色
Color color = Color.red;
//设置水印文字的旋转角度
Integer rotationAngle = 45;
//设置水印的透明度
float transparency = 0.8f;
OutputStream outImgStream = null;
//开始设置水印
try {
//获取需要打水印的图片
File fromImagFile = new File(sourceImgPath);
//将需要打水印的图片转换成图片
Image fromImage = ImageIO.read(fromImagFile);
//获取图片的宽度
int imageWidth = fromImage.getWidth(null);
//获取图片的高度
int imageHeight = fromImage.getHeight(null);
//获取最大的长度
int maxLength = imageHeight > imageWidth ? imageHeight : imageWidth;
//设置水印字体和大小
Font waterFont = new Font("微软雅黑 Light",Font.BOLD,maxLength/radio);
//在缓冲区内加一个图片
BufferedImage bufferedImage = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics2D graphics2D = bufferedImage.createGraphics();
//设置打水印的范围以及指定打印的图片
graphics2D.drawImage(fromImage,0,0,imageWidth,imageHeight,null);
//设置水印颜色
graphics2D.setColor(color);
//设置水印字体
graphics2D.setFont(waterFont);
//设置水印透明度
graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, transparency));
//设置水印旋转角度
graphics2D.rotate(rotationAngle);
// 打印的行数
int rowsNumber = 3;
//每行打印的列数
int columnsNumber = 3 ;
//循环画出水印
for (int j = 0; j < rowsNumber; j++) {
for (int i = 0; i < columnsNumber; i++) {
//画出水印,并设置水印位置
graphics2D.drawString(waterMarkContent, i * width + j * width, -i * width + j * width);
}
}
// 释放资源
graphics2D.dispose();
// 输出图片
outImgStream = new FileOutputStream(tarImgPath);
//输出画水印的图片(输出格式可以自己定义)
ImageIO.write(bufferedImage, fileExt, outImgStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outImgStream != null) {
outImgStream.flush();
outImgStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}