java给上传的mutipartfile照片添加水印
时间: 2023-12-08 14:04:55 浏览: 131
java 图片添加水印
在Java中给上传的`MultipartFile`照片添加水印可以通过以下步骤实现:
1. 将`MultipartFile`转换成`BufferedImage`对象,可以使用`ImageIO`类将`MultipartFile`转换成`BufferedImage`对象,例如:
```
MultipartFile multipartFile = ...;
BufferedImage image = ImageIO.read(multipartFile.getInputStream());
```
2. 在照片上添加水印,可以使用Java的Graphics2D类来实现。可以在指定位置绘制文字或图片,例如:
```
// 创建Graphics2D对象
Graphics2D g = image.createGraphics();
// 设置水印文字字体、颜色、透明度等
g.setColor(Color.RED);
g.setFont(new Font("微软雅黑", Font.PLAIN, 40));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3f));
// 绘制水印文字
g.drawString("watermark", 100, 100);
// 绘制水印图片
Image watermark = ImageIO.read(new File("watermark.png"));
g.drawImage(watermark, 200, 200, null);
// 释放Graphics2D对象
g.dispose();
```
3. 将添加水印后的`BufferedImage`对象转换成`MultipartFile`对象,可以使用`ByteArrayOutputStream`将`BufferedImage`对象转换成字节数组,然后再将字节数组转换成`MultipartFile`对象,例如:
```
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
MultipartFile watermarkedFile = new MockMultipartFile("watermarked.jpg", new ByteArrayInputStream(os.toByteArray()));
```
完整的代码示例:
```
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
public class Watermark {
public static MultipartFile addWatermark(MultipartFile file) {
try {
// 将MultipartFile转换成BufferedImage对象
BufferedImage image = ImageIO.read(file.getInputStream());
// 添加水印
Graphics2D g = image.createGraphics();
g.setColor(Color.RED);
g.setFont(new Font("微软雅黑", Font.PLAIN, 40));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3f));
g.drawString("watermark", 100, 100);
Image watermark = ImageIO.read(new File("watermark.png"));
g.drawImage(watermark, 200, 200, null);
g.dispose();
// 将BufferedImage对象转换成MultipartFile对象
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
MultipartFile watermarkedFile = new MockMultipartFile("watermarked.jpg", new ByteArrayInputStream(os.toByteArray()));
return watermarkedFile;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
```
需要注意的是,添加水印后的照片格式应与上传的照片格式相同,否则可能无法上传成功。另外,上述代码中使用了Spring Framework中的`MockMultipartFile`类来创建`MultipartFile`对象,如果没有使用Spring Framework,可以自行实现`MultipartFile`接口。
阅读全文