java之批量给某目录下指定的图片格式添加水印文字效果

java之批量给某目录下指定的图片格式添加水印文字效果

 public static void main(String[] args) throws Exception {
    
    
      //调用方法  参数1是原目录图片 参数2是目标目录
      allwaterimg(new File("F:/download/壁纸"), new File("F:/beg"));
  }
  public static void allwaterimg(File src, File dst) throws Exception {
    
    
      //判断原目录文件的类型是不是文件或者目录格式,如果是文件,则继续判断是不是jpg类型
      if (src.isFile() && src.getName().endsWith(".jpg")) {
    
    
          //是文件且是jpg格式类型,则调用waterimg方法
          waterimg(src, dst);
      }  
      else if (src.isDirectory()) {
    
    
          for (File ff : src.listFiles()) {
    
    
              if (!dst.exists()) {
    
    
                  dst.mkdirs();
              }
              //如果文件是目录,则进行递归
              if (ff.isDirectory()) {
    
    
                  //进行递归处理并新建目录
                  allwaterimg(ff, new File(dst + "/" + ff.getName()));
              }
              //是文件,进行判断是否是jpg格式,是就调用waterimg方法
              else if (ff.isFile() && ff.getName().endsWith(".jpg")) {
    
    
                  waterimg(ff, new File(dst, ff.getName()));
              }
          }
      }
  }
  public static void waterimg(File src, File dst) throws Exception {
    
    
      //获取原文件
      BufferedImage img = ImageIO.read(src);
      //获取原图片的宽和高
      int iw = img.getWidth();
      int ig = img.getHeight();
      //画笔
      Graphics2D g = img.createGraphics();
      //设置线条和文件的,抗锯齿(平滑)
      g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
      //设置水印文字
      String txt = "版权所有 禁止复制";
      txt = String.format("%tF %<tT", System.currentTimeMillis());
      //设置水印文字类型,这里也可以使用系统自带的文字类型
      var font = Font.createFont(Font.TRUETYPE_FONT, new File("fonts/FZZYJW.TTF")).deriveFont(Font.BOLD, 100f);
      //画笔获得文字类型
      g.setFont(font);
      Random rand = new Random();
      //随机字体的颜色以及透明度
      Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
      g.setColor(color);
      //获取字体大小
      FontMetrics fm = g.getFontMetrics(font);
      int ascent = fm.getAscent();
      int fw = fm.stringWidth(txt);
      //左上角打上水印
      int tx = 0 + 10;
      int ty = ascent + 10;
     /*  //左下角打上水印
        tx = 0 + 10;
        ty = ig - 15;
        //右上角打上水印
        tx = iw - fw - 10;
        ty = ascent + 10;
        //右下角打上水印
        tx = iw - fw - 10;
        ty = ig - 15;
        //中间打上水印
        tx = (iw - fw) / 2;
        ty = (ig - ascent) / 2 + ascent;*/
      //随机位置打上水印
      tx = rand.nextInt(10, iw - fw - 10);
      ty = rand.nextInt(ascent + 10, ig - 5 - 10);
      g.drawString(txt, tx, ty);
      //释放画笔
      g.dispose();
      ImageIO.write(img, "jpg", new File(dst.getParent(),UUID.randomUUID()+".jpg"));
  }

猜你喜欢

转载自blog.csdn.net/qq_59088934/article/details/128587459