一般圖片打的水印都是固定寬高,這樣會在原圖尺寸過大或者過小的情況,打上去的水印太渺小,或者占去太多面積。因此比較好的方法是根據原圖寬高,動態調整水印圖尺寸,保持和原圖大小相匹配,即你大我也大,你小我也小。
代碼邏輯包含三點:
- 定一個水印尺寸比例。
- 根據原圖寬高x比例,得到新的水印寬高。
- 根據新的水印寬高生成新的水印,再執行添加水印操作。
@Test
public void watermarkWidthHeight() throws IOException {
//讀取原圖,獲取寬高
File file = new File("D:\\Test\\wKgeyV9V9EaAEswvAAbhnus5POc405.png");
BufferedImage image = ImageIO.read(file);
//讀取水印圖
URL waterUrl = this.getClass().getResource("/watermark.png");
BufferedImage waterImg = ImageIO.read(waterUrl);
double bl = 0.18;//水印為原圖寬占比
//根據比例計算新的水印圖寬高
int waterWidth = (int) (image.getWidth() * bl);
int waterHeight = waterWidth * waterImg.getHeight() / waterImg.getWidth();
waterImg = Thumbnails.of(waterImg).size(waterWidth, waterHeight)
.keepAspectRatio(false).asBufferedImage();
//使用新水印執行添加水印操作
Thumbnails.of(file).watermark(Positions.BOTTOM_RIGHT, bufferedImage, 1f)
.scale(1).toFile("D:\\Test\\" + System.currentTimeMillis());
}