Java实现给图片添加文字水印:根据图片大小动态调整字体大小(附代码示例)
在Java中,给图片添加文字水印并根据图片大小动态调整字体大小,可以通过Java的AWT和Swing库中的类如BufferedImage、Graphics2D以及FontMetrics来实现。以下是一个简单的示例: ```java import javax.imageio.ImageIO; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class Watermark { public static void addWatermark(String srcPath, String destPath, String watermarkText) throws IOException { // 读取原图片 BufferedImage sourceImage = ImageIO.read(new File(srcPath)); int width = sourceImage.getWidth(); int height = sourceImage.getHeight(); // 创建一个新的缓冲图像用于添加水印 BufferedImage destinationImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = destinationImage.createGraphics(); // 设置抗锯齿 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 设置颜色和字体 Font font = new Font("Arial", Font.BOLD, calculateFontSize(width, height)); g2d.setColor(Color.white); // 获取字体metrics,用于计算文本的宽度和高度 FontMetrics metrics = g2d.getFontMetrics(font); Rectangle2D rect = metrics.getStringBounds(watermarkText, g2d); // 计算水印的位置 int x = (int) ((width - rect.getWidth()) / 2); int y = (int) ((height - rect.getHeight()) / 2 + rect.getY()); // 在图片上绘制水印文字 g2d.setFont(font); g2d.drawString(watermarkText, x, y); // 将修改后的图像写出到文件 ImageIO.write(destinationImage, "png", new File(destPath)); g2d.dispose(); } private static int calculateFontSize(int width, int height) { // 这里可以根据实际需求定义字体大小的计算方式,比如根据图片尺寸按比例缩放 return Math.min(width, height) / 20; // 假设我们设定为图片最小边长度的1/20作为字体大小 } public static void main(String[] args) throws IOException { addWatermark("source.png", "destination.png", "Your Watermark Text"); } } ``` 上述代码中,`calculateFontSize`方法是关键,它根据图片的宽度和高度来计算合适的字体大小。你可以根据实际情况调整这个函数的逻辑,以满足你的需求。 ######[AI写代码神器 | 568点数解答 | 2024-02-27 13:44:46]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)423
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)50
- 巧用 CDN 搭建含照片轮播、社交链接与 AI 对话的单页个人网页(字节豆包 | 485点数解答 | 2024-10-28 23:31:13)260
- 巧用 CDN 搭建单页个人网页:含照片轮播、社交链接与 AI 对话界面 (阿里通义 | 1752点数解答 | 2024-10-28 23:32:45)247
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)325
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1203
- jQuery 实现动态操作 DOM:打造可增删任务的待办事项列表应用(百度文心 | 1015点数解答 | 2024-10-26 23:41:22)446
- jQuery 打造实用待办事项列表:输入添加、点击删除一步到位!(阿里通义 | 1139点数解答 | 2024-10-29 08:44:48)361
- jQuery 实现动态操作 DOM:打造带添加与删除功能的待办事项列表应用(阿里通义 | 687点数解答 | 2024-10-29 09:25:06)376
- jQuery 实战:打造可添加与删除任务的待办事项列表应用(字节豆包 | 499点数解答 | 2024-10-29 20:40:48)287
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)364
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)285