Java 图片裁剪,截取

简介: Java 图片裁剪,截取

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

目录
相关文章
|
3月前
|
Java
Java系列之:字符串UTF-8 编码格式转换位 UTF-32 【生僻字截取问题】
这篇文章讨论了在Java中处理包含生僻字的字符串时可能遇到的问题,并提供了一种解决方法:将字符串的编码格式从UTF-8转换为UTF-32,以确保每个字符都占用固定的字节数,从而避免在截取操作中破坏字符,示例代码展示了如何进行编码转换和字符串截取。
|
3月前
|
Java
Java系列之:字符串的截取及分割 split() 和 substring()
这篇文章通过示例代码讲解了Java中字符串的截取和分割操作,包括使用`split()`方法根据正则表达式进行字符串分割以及使用`substring()`方法进行字符串截取的不同使用方式及其输出结果。
Java系列之:字符串的截取及分割 split() 和 substring()
|
3月前
|
Java
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
85 0
|
5月前
|
Java 程序员
java截取字符串的几种方法
java截取字符串的几种方法
|
5月前
|
Java
Java 截取字符串中指定的分隔符放入list中
Java 截取字符串中指定的分隔符放入list中
30 0
|
6月前
|
算法 Java 索引
Java中String字符串截取几种方法(substring,split)
Java中String字符串截取几种方法(substring,split)
79 0
|
Java Maven
Java如何实现截取字符串
Java中实现截取字符串的几种方式
1488 0
Java如何实现截取字符串
|
JavaScript Java
Java Script 操作字符串的几种方法(截取,拼接等)
Java Script 操作字符串的几种方法(截取,拼接等)
250 0
Java Script 操作字符串的几种方法(截取,拼接等)
|
JavaScript 前端开发 Java
知识分享之Java——JS中展示字符串根据限定长度截取并拼接...
使用java编写jsp时有时我们需要对其内容在前端进行截取,这时就需要使用到js的一些字符串操作函数了,下面是我整理的一个标题显示截取的小工具,有需要的可以直接使用,当然有的小伙伴直接将其简化为三目运算符的方式,但我用自动扫描工具显示不推荐使用,因此还是老实使用这个if写法了。
92 0
知识分享之Java——JS中展示字符串根据限定长度截取并拼接...
Java String 字符串 截取保留小数点后两位
Java String 字符串 截取保留小数点后两位
718 0