封装文字信息并添加文字
List<ImageDTO> list = new ArrayList<>();
list.add(createImageDTO("测试水印"+ " KG", //文字内容
new Color(255, 0, 0, 255), //颜色及透明度
new Font("微软雅黑", Font.PLAIN, 24), //字体
0.6d, //横坐标位置
0.1d //纵坐标位置
));
//通过网络url获取图片file
String url = "https://.......";
File srcImgFile = URLToFile(url, fileName);
//调用添加文字
BufferedImage file = setWatermarkTask(srcImgFile, list);
可直接传入xy坐标位置,本文已改为传入百分比并通过图片宽高计算
/**
* 添加水印
*/
private BufferedImage setWatermarkTask(File srcImgFile, List<ImageDTO> list) {
try {
Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
int srcImgHeight = srcImg.getHeight(null);//获取图片的高
//添加文字:
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
for (ImageDTO imgDTO : list) {
g.setColor(imgDTO.getColor()); //根据图片的背景设置水印颜色
g.setFont(imgDTO.getFont()); //设置字体
g.drawString(imgDTO.getText(), Math.round(imgDTO.getX() * (double) srcImgWidth), Math.round(imgDTO.getY() * (double) srcImgHeight)); //画出水印
}
g.dispose();
return bufImg;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 创建ImageDTO, 每一个对象,代表在该图片中要插入的一段文字内容:
*
* @param text : 文本内容;
* @param color : 字体颜色(前三位)和透明度(第4位,值越小,越透明);
* @param font : 字体的样式和字体大小;
* @param x : 当前字体在该图片位置的横坐标;
* @param y : 当前字体在该图片位置的纵坐标;
* @return
*/
private ImageDTO createImageDTO(String text, Color color, Font font, Double x, Double y) {
ImageDTO imageDTO = new ImageDTO();
imageDTO.setText(text);
imageDTO.setColor(color);
imageDTO.setFont(font);
imageDTO.setX(x);
imageDTO.setY(y);
return imageDTO;
}
/**
* 读取网络中的图片
*/
private File URLToFile(String url, String fileName) {
File file1 = new File(fileName);
try {
URL url1 = new URL(url);
FileUtils.copyURLToFile(url1, file1);
} catch (IOException e) {
e.printStackTrace();
}
File absoluteFile = file1.getAbsoluteFile();
return file1;
}
文字详情实体类
@Data
public class ImageDTO {
//文字内容
private String text;
//字体颜色和透明度
private Color color;
//字体和大小
private Font font;
//所在图片的x坐标百分比
private Double x;
//所在图片的y坐标百分比
private Double y;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。