@Slf4j
public class ImageUtils {
@Test
public void test1() throws IOException {
Path path = Paths.get("D:\\Files\\CDN\\file\\_resources");
if (!Files.exists(path)) {
throw new RuntimeException("目录或文件不存在!");
}
List<Path> collect = new ArrayList<>();
if (Files.isDirectory(path)) {
collect = Files.walk(path).filter(temp -> temp.getFileName().toString().endsWith(".png")).collect(Collectors.toList());
} else {
boolean b = path.getFileName().toString().endsWith(".png");
if (b) {
collect.add(path);
}
}
if (CollectionUtils.isEmpty(collect)) {
return;
}
for (Path temp : collect) {
changeImg(temp.toFile());
}
}
private void changeImg(File srcImgFile) throws IOException {
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);
g.setColor(new Color(158,160,161));
g.setFont(new Font("微软雅黑", Font.BOLD, 12));
String waterMarkContent = "https://www.cnblogs.com/lemonpuer";
int x = (srcImgWidth - getWatermarkLength(waterMarkContent, g)) - 5;
int y = srcImgHeight - 5;
g.drawString(waterMarkContent, x, y);
g.dispose();
FileOutputStream outImgStream = new FileOutputStream(srcImgFile);
ImageIO.write(bufImg, "png", outImgStream);
log.info("图片{}成功添加水印",srcImgFile.getName());
outImgStream.flush();
outImgStream.close();
}
private int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库