Java 圖片裁剪,擷取

fhadmin發表於2022-01-28
aven依賴
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1.1-jre</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.2</version>
        </dependency>
程式碼
package ai.guiji.csdn.tool;
import cn.hutool.core.util.IdUtil;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import org.bytedeco.javacpp.Loader;
import java.io.File;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
/**
 * java專案fhadmin.cn
 * 裁剪工具 @Version: V1.0
 */
public class CutOutTool {
  /**
   * 圖片裁剪
   *
   * @param imagePath 圖片地址
   * @param outputDir 臨時目錄
   * @param startX 裁剪起始x座標
   * @param startY 裁剪起始y座標
   * @param weight 裁剪寬度
   * @param height 裁剪高度
   * @throws Exception 異常
   */
  public static String cutOutImage(
      String imagePath,
      String outputDir,
      Integer startX,
      Integer startY,
      Integer weight,
      Integer height)
      throws Exception {
    List<String> paths = Splitter.on(".").splitToList(imagePath);
    String ext = paths.get(paths.size() - 1);
    if (!Arrays.asList("png", "jpg").contains(ext)) {
      throw new Exception("format error");
    }
    String resultPath =
        Joiner.on(File.separator).join(Arrays.asList(outputDir, IdUtil.simpleUUID() + "." + ext));
    String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
    ProcessBuilder builder =
        new ProcessBuilder(
            ffmpeg,
            "-i",
            imagePath,
            "-vf",
            MessageFormat.format(
                "crop={0}:{1}:{2}:{3}",
                String.valueOf(weight),
                String.valueOf(height),
                String.valueOf(startX),
                String.valueOf(startY)),
            "-y",
            resultPath);
    builder.inheritIO().start().waitFor();
    return resultPath;
  }
  public static void main(String[] args) throws Exception {
    System.out.println(
        cutOutImage(
            "C:\\Users\\yi\\Desktop\\2054011.jpg", "C:\\Users\\yi\\Desktop\\", 0, 0, 1920, 2160));
  }
}
程式碼說明:
1、cutOutImage方法引數分別為圖片路徑、輸出臨時目錄、起始座標x值、起始座標y值、裁剪寬度、裁剪高度。
2、採用uuid作為臨時輸出唯一id,避免重複。
3、對檔案字尾格式做了校驗,可以按照需求自行調整。
4、裁剪尺寸不能超出圖片限制,按照需求自行調整。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558068/viewspace-2854437/,如需轉載,請註明出處,否則將追究法律責任。

相關文章