Exemplo n.º 1
0
  public static void addWatermark(File srcFile, File destFile, File watermarkFile, int alpha) {
    Assert.notNull(srcFile);
    Assert.notNull(destFile);
    Assert.state(alpha >= 0);
    Assert.state(alpha <= 100);
    if (watermarkFile == null || !watermarkFile.exists()) {
      try {
        FileUtils.copyFile(srcFile, destFile);
      } catch (IOException e) {
        e.printStackTrace();
      }
      return;
    }
    if (type == Type.jdk) {
      Graphics2D graphics2D = null;
      ImageOutputStream imageOutputStream = null;
      ImageWriter imageWriter = null;
      try {
        BufferedImage srcBufferedImage = ImageIO.read(srcFile);
        int srcWidth = srcBufferedImage.getWidth();
        int srcHeight = srcBufferedImage.getHeight();
        BufferedImage destBufferedImage =
            new BufferedImage(srcWidth, srcHeight, BufferedImage.TYPE_INT_RGB);
        graphics2D = destBufferedImage.createGraphics();
        graphics2D.setBackground(BACKGROUND_COLOR);
        graphics2D.clearRect(0, 0, srcWidth, srcHeight);
        graphics2D.drawImage(srcBufferedImage, 0, 0, null);
        graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha / 100F));

        BufferedImage watermarkBufferedImage = ImageIO.read(watermarkFile);
        int watermarkImageWidth = watermarkBufferedImage.getWidth();
        int watermarkImageHeight = watermarkBufferedImage.getHeight();
        int x = srcWidth - watermarkImageWidth;
        int y = srcHeight - watermarkImageHeight;

        graphics2D.drawImage(
            watermarkBufferedImage, x, y, watermarkImageWidth, watermarkImageHeight, null);

        imageOutputStream = ImageIO.createImageOutputStream(destFile);
        imageWriter =
            ImageIO.getImageWritersByFormatName(FilenameUtils.getExtension(destFile.getName()))
                .next();
        imageWriter.setOutput(imageOutputStream);
        ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
        imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        imageWriteParam.setCompressionQuality(DEST_QUALITY / 100F);
        imageWriter.write(null, new IIOImage(destBufferedImage, null, null), imageWriteParam);
        imageOutputStream.flush();
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        if (graphics2D != null) {
          graphics2D.dispose();
        }
        if (imageWriter != null) {
          imageWriter.dispose();
        }
        if (imageOutputStream != null) {
          try {
            imageOutputStream.close();
          } catch (IOException e) {
          }
        }
      }
    } else {
      IMOperation operation = new IMOperation();
      operation.dissolve(alpha);
      operation.quality((double) DEST_QUALITY);
      operation.addImage(watermarkFile.getPath());
      operation.addImage(srcFile.getPath());
      operation.addImage(destFile.getPath());
      if (type == Type.graphicsMagick) {
        CompositeCmd compositeCmd = new CompositeCmd(true);
        if (graphicsMagickPath != null) {
          compositeCmd.setSearchPath(graphicsMagickPath);
        }
        try {
          compositeCmd.run(operation);
        } catch (IOException e) {
          e.printStackTrace();
        } catch (InterruptedException e) {
          e.printStackTrace();
        } catch (IM4JavaException e) {
          e.printStackTrace();
        }
      } else {
        CompositeCmd compositeCmd = new CompositeCmd(false);
        if (imageMagickPath != null) {
          compositeCmd.setSearchPath(imageMagickPath);
        }
        try {
          compositeCmd.run(operation);
        } catch (IOException e) {
          e.printStackTrace();
        } catch (InterruptedException e) {
          e.printStackTrace();
        } catch (IM4JavaException e) {
          e.printStackTrace();
        }
      }
    }
  }
Exemplo n.º 2
0
  /**
   * 添加水印.
   *
   * @param srcFile 源文件
   * @param destFile 目标文件
   * @param watermarkFile 水印文件
   * @param watermarkPosition 水印位置
   * @param alpha 水印透明度(0-100)
   */
  public static void addWatermark(
      File srcFile,
      File destFile,
      File watermarkFile,
      WatermarkPosition watermarkPosition,
      int alpha) {
    if (watermarkFile == null
        || !watermarkFile.exists()
        || watermarkPosition == null
        || watermarkPosition == WatermarkPosition.no) {
      return;
    }
    if (type == Type.jdk) {
      try {
        BufferedImage srcBufferedImage = ImageIO.read(srcFile);
        int srcWidth = srcBufferedImage.getWidth();
        int srcHeight = srcBufferedImage.getHeight();
        BufferedImage destBufferedImage =
            new BufferedImage(srcWidth, srcHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics2D = destBufferedImage.createGraphics();
        graphics2D.setBackground(BACKGROUND_COLOR);
        graphics2D.clearRect(0, 0, srcWidth, srcHeight);
        graphics2D.drawImage(srcBufferedImage, 0, 0, null);
        graphics2D.setComposite(
            AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha / 100.0F));

        BufferedImage watermarkBufferedImage = ImageIO.read(watermarkFile);
        int watermarkImageWidth = watermarkBufferedImage.getWidth();
        int watermarkImageHeight = watermarkBufferedImage.getHeight();
        int x = srcWidth - watermarkImageWidth;
        int y = srcHeight - watermarkImageHeight;
        if (watermarkPosition == WatermarkPosition.topLeft) {
          x = 0;
          y = 0;
        } else if (watermarkPosition == WatermarkPosition.topRight) {
          x = srcWidth - watermarkImageWidth;
          y = 0;
        } else if (watermarkPosition == WatermarkPosition.center) {
          x = (srcWidth - watermarkImageWidth) / 2;
          y = (srcHeight - watermarkImageHeight) / 2;
        } else if (watermarkPosition == WatermarkPosition.bottomLeft) {
          x = 0;
          y = srcHeight - watermarkImageHeight;
        } else if (watermarkPosition == WatermarkPosition.bottomRight) {
          x = srcWidth - watermarkImageWidth;
          y = srcHeight - watermarkImageHeight;
        }
        graphics2D.drawImage(
            watermarkBufferedImage, x, y, watermarkImageWidth, watermarkImageHeight, null);
        graphics2D.dispose();
        ImageIO.write(destBufferedImage, FileUtil.getExtension(destFile), destFile);
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    } else {
      String gravity = "SouthEast";
      if (watermarkPosition == WatermarkPosition.topLeft) {
        gravity = "NorthWest";
      } else if (watermarkPosition == WatermarkPosition.topRight) {
        gravity = "NorthEast";
      } else if (watermarkPosition == WatermarkPosition.center) {
        gravity = "Center";
      } else if (watermarkPosition == WatermarkPosition.bottomLeft) {
        gravity = "SouthWest";
      } else if (watermarkPosition == WatermarkPosition.bottomRight) {
        gravity = "SouthEast";
      }
      IMOperation operation = new IMOperation();
      operation.gravity(gravity);
      operation.dissolve(alpha);
      operation.quality((double) DEST_QUALITY);
      operation.addImage(watermarkFile.getPath());
      operation.addImage(srcFile.getPath());
      operation.addImage(destFile.getPath());
      if (type == Type.graphicsMagick) {
        CompositeCmd compositeCmd = new CompositeCmd(true);
        if (graphicsMagickPath != null) {
          compositeCmd.setSearchPath(graphicsMagickPath);
        }
        try {
          compositeCmd.run(operation);
        } catch (IOException | InterruptedException | IM4JavaException e) {
          throw new RuntimeException(e);
        }
      } else {
        CompositeCmd compositeCmd = new CompositeCmd(false);
        if (imageMagickPath != null) {
          compositeCmd.setSearchPath(imageMagickPath);
        }
        try {
          compositeCmd.run(operation);
        } catch (IOException | InterruptedException | IM4JavaException e) {
          throw new RuntimeException(e);
        }
      }
    }
  }