java 文字水印 旋转_java实现倾斜水印铺满整张图
时间: 2024-01-15 22:02:37 浏览: 24
要在Java中实现倾斜的水印并铺满整张图片,可以使用Graphics2D类的rotate()方法和drawString()方法。
下面是一个实现的示例代码:
```java
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Watermark {
public static void main(String[] args) throws Exception {
// 读取原图
BufferedImage image = ImageIO.read(new File("original.jpg"));
// 创建一个新的 BufferedImage,大小与原图相同
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
// 获取 Graphics2D 对象,用于绘制水印
Graphics2D g2d = newImage.createGraphics();
// 将水印旋转 45 度
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(45), image.getWidth() / 2, image.getHeight() / 2);
g2d.setTransform(at);
// 设置水印字体、颜色、大小
g2d.setFont(new Font("微软雅黑", Font.BOLD, 20));
g2d.setColor(Color.WHITE);
// 计算水印文字的宽度、高度
String watermark = "watermark";
FontMetrics fm = g2d.getFontMetrics();
int textWidth = fm.stringWidth(watermark);
int textHeight = fm.getHeight();
// 计算水印文字的起始位置
int startX = -textWidth / 2;
int startY = image.getHeight() / 2;
// 循环绘制水印,直到铺满整张图
int x = startX;
int y = startY;
while (y < image.getHeight() + textHeight) {
g2d.drawString(watermark, x, y);
x += textWidth;
if (x > image.getWidth() + textWidth) {
x = startX;
y += textHeight;
}
}
// 释放 Graphics2D 对象
g2d.dispose();
// 保存新图
ImageIO.write(newImage, "jpg", new File("watermarked.jpg"));
}
}
```
在这个示例中,我们首先读取了一张原始的图片,然后创建了一个新的 BufferedImage 对象,大小与原图相同。接着,我们获取 Graphics2D 对象,并使用 AffineTransform 类将水印旋转了 45 度。然后,我们设置了水印的字体、颜色、大小,并计算出了水印文字的宽度和高度。最后,我们使用循环绘制水印,并在绘制的过程中不断调整水印的位置,直到铺满整张图。最后,我们将新图保存到文件中。
注意,这个示例只是一个简单的实现,实际上还有很多细节需要注意。比如,当水印文字倾斜时,它的宽度和高度可能会发生变化,因此我们需要重新计算起始位置。此外,如果原图是 PNG 格式等支持透明度的图片,我们还需要考虑如何处理透明度。总之,在实际应用中,我们需要根据具体情况进行调整和优化。