java添加水印等比缩放
时间: 2023-10-20 16:12:31 浏览: 93
PHP实现图片的等比缩放和Logo水印功能示例
Java 中添加水印可以使用 Graphics2D 类的 drawString 方法和 drawImage 方法,等比缩放可以使用 AffineTransform 类。
下面是一个简单的示例代码:
```java
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Watermark {
public static void main(String[] args) throws IOException {
// 读取原始图片
BufferedImage originalImage = ImageIO.read(new File("original.png"));
// 创建带有透明背景的 BufferedImage
BufferedImage newImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
// 获取 Graphics2D 对象
Graphics2D g2d = newImage.createGraphics();
// 将原始图片绘制到新图片上
g2d.drawImage(originalImage, 0, 0, null);
// 添加水印
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
g2d.setColor(Color.WHITE);
g2d.setFont(new Font("Arial", Font.BOLD, 48));
g2d.drawString("Watermark", 50, 100);
// 等比缩放
int newWidth = 400; // 新宽度
int newHeight = (int) (originalImage.getHeight() * ((double) newWidth / originalImage.getWidth())); // 新高度
AffineTransform transform = new AffineTransform();
transform.scale((double) newWidth / originalImage.getWidth(), (double) newHeight / originalImage.getHeight());
BufferedImage scaledImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D scaledGraphics = scaledImage.createGraphics();
scaledGraphics.drawImage(originalImage, transform, null);
// 保存新图片
ImageIO.write(newImage, "png", new File("new.png"));
ImageIO.write(scaledImage, "png", new File("scaled.png"));
// 关闭 Graphics2D 对象
g2d.dispose();
scaledGraphics.dispose();
}
}
```
这个示例代码读取了一个名为 `original.png` 的图片,将它绘制到一个带有透明背景的 BufferedImage 上,并在图片上添加了一个白色的透明水印。然后使用 AffineTransform 类对图片进行等比缩放,并保存到名为 `new.png` 和 `scaled.png` 的文件中。
阅读全文