Пример #1
0
 /**
  * 等比例图片缩放.
  *
  * @param srcFile 源文件
  * @param destFile 目标文件
  * @param destWidth 目标宽度(>0)
  * @param destHeight 目标高度(>0)
  */
 public static void zoom(File srcFile, File destFile, int destWidth, int destHeight) {
   if (type == Type.jdk) {
     try {
       BufferedImage srcBufferedImage = ImageIO.read(srcFile);
       int srcWidth = srcBufferedImage.getWidth();
       int srcHeight = srcBufferedImage.getHeight();
       int width = destWidth;
       int height = destHeight;
       if (srcHeight >= srcWidth) {
         width = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
       } else {
         height = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
       }
       BufferedImage destBufferedImage =
           new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
       Graphics2D graphics2D = destBufferedImage.createGraphics();
       graphics2D.setBackground(BACKGROUND_COLOR);
       graphics2D.clearRect(0, 0, destWidth, destHeight);
       graphics2D.drawImage(
           srcBufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),
           (destWidth / 2) - (width / 2),
           (destHeight / 2) - (height / 2),
           null);
       graphics2D.dispose();
       ImageIO.write(destBufferedImage, FileUtil.getExtension(destFile), destFile);
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
   } else {
     IMOperation operation = new IMOperation();
     operation.thumbnail(destWidth, destHeight);
     operation.gravity("center");
     operation.background(toHexEncoding(BACKGROUND_COLOR));
     operation.extent(destWidth, destHeight);
     operation.quality((double) DEST_QUALITY);
     operation.addImage(srcFile.getPath());
     operation.addImage(destFile.getPath());
     if (type == Type.graphicsMagick) {
       ConvertCmd convertCmd = new ConvertCmd(true);
       if (graphicsMagickPath != null) {
         convertCmd.setSearchPath(graphicsMagickPath);
       }
       try {
         convertCmd.run(operation);
       } catch (IOException | InterruptedException | IM4JavaException e) {
         throw new RuntimeException(e);
       }
     } else {
       ConvertCmd convertCmd = new ConvertCmd(false);
       if (imageMagickPath != null) {
         convertCmd.setSearchPath(imageMagickPath);
       }
       try {
         convertCmd.run(operation);
       } catch (IOException | InterruptedException | IM4JavaException e) {
         throw new RuntimeException(e);
       }
     }
   }
 }
Пример #2
0
  public static void zoom(File srcFile, File destFile, int destWidth, int destHeight) {
    Assert.notNull(srcFile);
    Assert.notNull(destFile);
    Assert.state(destWidth > 0);
    Assert.state(destHeight > 0);
    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();
        int width = destWidth;
        int height = destHeight;
        if (srcHeight >= srcWidth) {
          width = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
        } else {
          height = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
        }
        BufferedImage destBufferedImage =
            new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
        graphics2D = destBufferedImage.createGraphics();
        graphics2D.setBackground(BACKGROUND_COLOR);
        graphics2D.clearRect(0, 0, destWidth, destHeight);
        graphics2D.drawImage(
            srcBufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),
            (destWidth / 2) - (width / 2),
            (destHeight / 2) - (height / 2),
            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((float) (DEST_QUALITY / 100.0));
        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.thumbnail(destWidth, destHeight);
      operation.gravity("center");
      operation.background(toHexEncoding(BACKGROUND_COLOR));
      operation.extent(destWidth, destHeight);
      operation.quality((double) DEST_QUALITY);
      operation.addImage(srcFile.getPath());
      operation.addImage(destFile.getPath());
      if (type == Type.graphicsMagick) {
        ConvertCmd convertCmd = new ConvertCmd(true);
        if (graphicsMagickPath != null) {
          convertCmd.setSearchPath(graphicsMagickPath);
        }
        try {
          convertCmd.run(operation);
        } catch (IOException e) {
          e.printStackTrace();
        } catch (InterruptedException e) {
          e.printStackTrace();
        } catch (IM4JavaException e) {
          e.printStackTrace();
        }
      } else {
        ConvertCmd convertCmd = new ConvertCmd(false);
        if (imageMagickPath != null) {
          convertCmd.setSearchPath(imageMagickPath);
        }
        try {
          convertCmd.run(operation);
        } catch (IOException e) {
          e.printStackTrace();
        } catch (InterruptedException e) {
          e.printStackTrace();
        } catch (IM4JavaException e) {
          e.printStackTrace();
        }
      }
    }
  }
Пример #3
0
  /**
   * 添加水印
   *
   * @param srcFile 源文件
   * @param destFile 目标文件
   * @param watermarkFile 水印文件
   * @param watermarkPosition 水印位置
   * @param alpha 水印透明度
   */
  public static void addWatermark(
      File srcFile,
      File destFile,
      File watermarkFile,
      WatermarkPosition watermarkPosition,
      int alpha) {
    Assert.notNull(srcFile);
    Assert.notNull(destFile);
    Assert.state(alpha >= 0);
    Assert.state(alpha <= 100);
    if (watermarkFile == null
        || !watermarkFile.exists()
        || watermarkPosition == null
        || watermarkPosition == WatermarkPosition.no) {
      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;
        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);

        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 {
      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 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();
        }
      }
    }
  }
Пример #4
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);
        }
      }
    }
  }