JAVA为图片添加水印
java代码
// 读取原图片信息 得到文件(本地图片)
File srcImgFile = new File(filePath);
//将文件对象转化为图片对象
BufferedImage srcImg = ImageIO.read(srcImgFile);
//获取图片的宽
int srcImgWidth = srcImg.getWidth();
//获取图片的高
int srcImgHeight = srcImg.getHeight();
System.out.println("图片的宽:" + srcImgWidth);
System.out.println("图片的高:" + srcImgHeight);
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
// 加水印
//创建画笔
Graphics2D g = bufImg.createGraphics();
//绘制原始图片
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
//-------------------------文字水印 start----------------------------
//根据图片的背景设置水印颜色
g.setColor(new Color(255, 255, 255, 128));
//设置字体 画笔字体样式为微软雅黑,加粗,文字大小为60pt
g.setFont(new Font("微软雅黑", Font.BOLD, 60));
//水印内容
String waterMarkContent = "www.tstone.cc";
//设置水印的坐标(为原图片中间位置)
int x = (srcImgWidth - getWatermarkLength(waterMarkContent, g)) / 2;
int y = srcImgHeight / 2;
//画出水印 第一个参数是水印内
// 容,第二个参数是x轴坐标,第三个参数是y轴坐标
g.drawString(waterMarkContent, x, y);
g.dispose();
//-------------------------文字水印 end----------------------------
//待存储的地址
// String tarImgPath="filePath";
// 输出图片
FileOutputStream outImgStream = new FileOutputStream(filePath);
ImageIO.write(bufImg, "png", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
开发过程中遇到问题:ImageIO.read读取文件为null
BufferedImage srcImg = ImageIO.read(srcImgFile);
后来在网上查找ImageIO用法知道,它可读取的图片类型是有限制的,可以读取图片的格式为:[BMP, bmp, jpg, JPG,wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
思路:
可是文件后缀是jpg格式,按道理说应该支持啊,后来将文件下载下来放到notepad++上查看才发现前缀是:RIFF? WEBPVP8
这说明该文件的实际格式是webp格式.文件后缀名有时候不是实际的文件格式.
解决方式
<dependency>
<groupId>org.sejda.imageio</groupId>
<artifactId>webp-imageio</artifactId>
<version>0.1.6</version>
</dependency>
- 只要在pom引入这配置即可正常使用!