美文网首页
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