美文网首页
Java 图片裁剪,截取

Java 图片裁剪,截取

作者: IT祖师爷 | 来源:发表于2022-01-28 16:57 被阅读0次

maven依赖

        <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、裁剪尺寸不能超出图片限制,按照需求自行调整。

相关文章

网友评论

      本文标题:Java 图片裁剪,截取

      本文链接:https://www.haomeiwen.com/subject/xpdtkrtx.html