InputStream中的文件流加上水印返回InputStream
时间: 2023-10-25 20:58:35 浏览: 98
您可以使用Java的Graphics2D类来给InputStream中的图片流添加水印,并将结果作为新的InputStream返回。下面是一个示例代码:
```java
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
public class WatermarkUtils {
public static InputStream addWatermark(InputStream inputStream, String watermarkText) throws IOException {
BufferedImage image = ImageIO.read(inputStream);
// 在图片上创建Graphics2D对象,用于添加水印
Graphics2D graphics = image.createGraphics();
// 设置水印字体样式
Font font = new Font("Arial", Font.BOLD, 36);
graphics.setFont(font);
// 设置水印颜色
graphics.setColor(Color.RED);
// 设置水印位置
int x = image.getWidth() - 200;
int y = image.getHeight() - 50;
// 添加水印
graphics.drawString(watermarkText, x, y);
// 释放资源
graphics.dispose();
// 将新生成的图片转为InputStream
InputStream output = ImageIO.createImageInputStream(image);
return output;
}
}
```
您可以使用上述代码的`addWatermark`方法将水印添加到输入的图片流中,并返回带有水印的新InputStream。例如:
```java
try {
InputStream input = new FileInputStream("input.jpg");
InputStream output = WatermarkUtils.addWatermark(input, "CSDN");
// 使用输出的InputStream进行后续操作
// ...
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
```
请注意,此代码仅适用于添加文本水印。如果您想要添加图像水印,可以使用`ImageIO.read`读取水印图片,并使用`graphics.drawImage`来添加水印图像。