java 图片压缩加文字水印
时间: 2024-08-21 09:01:42 浏览: 29
在 Java 中,图片压缩和添加文字水印通常涉及到图像处理库,如Apache Commons Imaging、ImageIO等。以下是基本步骤:
1. **图片压缩**:
- 使用 `BufferedImage` 类加载图片。
- 调用 `getScaledInstance()` 或 `rescaleWidthHeight()` 函数调整图片尺寸,减少宽度和高度,达到压缩效果。
- 将压缩后的 `BufferedImage` 写入一个新的文件。
```java
import javax.imageio.ImageIO;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
public BufferedImage compressImage(BufferedImage original, int newWidth, int newHeight) {
// 压缩比例
double scale = Math.min((double)newWidth / original.getWidth(), (double)newHeight / original.getHeight());
AffineTransform at = new AffineTransform();
at.scale(scale, scale);
at.translate(-(newWidth * scale - original.getWidth()) / 2, -(newHeight * scale - original.getHeight()) / 2);
BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
Graphics2D g = resized.createGraphics();
g.drawImage(original, at, null);
g.dispose();
return resized;
}
```
2. **文字水印**:
- 使用 `Font` 和 `Graphics2D` 绘制文字到压缩后的图片上。
- 确定文字的位置,可以放在图片的右下角或其他自定义位置。
```java
public void addWatermark(BufferedImage image, String watermarkText, Color color, float x, float y) {
Graphics2D g = image.createGraphics();
Font font = new Font("Arial", Font.BOLD, 16);
g.setFont(font);
g.setColor(color);
g.drawString(watermarkText, (int)x, (int)y);
g.dispose();
}
```
将这两个方法结合起来,先压缩图片再添加文字水印:
```java
BufferedImage original = ImageIO.read(new File("input.jpg"));
BufferedImage watermarked = compressImage(original, 800, 600); // 假设目标大小为800x600
addWatermark(watermarked, "这是水印", Color.YELLOW, 750, 550); // 文字位置在右下角
ImageIO.write(watermarked, "jpg", new File("output.jpg"));
```