@Slf4jpublic 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 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()); } } /** * 加水印 * * @param srcImgFile 本地图片地址 * @throws IOException */ private void changeImg(File srcImgFile) throws IOException { //将文件对象转化为图片对象 Image srcImg = ImageIO.read(srcImgFile); //获取图片的宽 int srcImgWidth = srcImg.getWidth(null); //获取图片的高 int srcImgHeight = srcImg.getHeight(null);// System.out.println("图片的宽:" + srcImgWidth);// System.out.println("图片的高:" + srcImgHeight); BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB); // 加水印 //创建画笔 Graphics2D g = bufImg.createGraphics(); //绘制原始图片 g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null); //-------------------------文字水印 start---------------------------- //根据图片的背景设置水印颜色 g.setColor(new Color(158,160,161)); //设置字体 画笔字体样式为微软雅黑,加粗,文字大小为12pt 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; //画出水印 第一个参数是水印内容,第二个参数是x轴坐标,第三个参数是y轴坐标 g.drawString(waterMarkContent, x, y); g.dispose(); //-------------------------文字水印 end---------------------------- //待存储的地址// String tarImgPath = "F:\\0a8de9fc675db86eab79aa36b7575374.png"; // 输出图片 FileOutputStream outImgStream = new FileOutputStream(srcImgFile); ImageIO.write(bufImg, "png", outImgStream); log.info("图片{}成功添加水印",srcImgFile.getName()); outImgStream.flush(); outImgStream.close(); } /** * 获取水印文字的长度 * * @param waterMarkContent * @param g * @return */ private int getWatermarkLength(String waterMarkContent, Graphics2D g) { return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length()); }}