目录

前言

Maven依赖

代码

总结


前言

本文提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。

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;/*** @Program: csdn @ClassName: CutOutTool @Author: 剑客阿良_ALiang @Date: 2022-01-23 18:27 @Description:* 裁剪工具 @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、裁剪尺寸不能超出图片限制,按照需求自行调整。

验证一下

准备的图片如下

执行结果

ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10.2.0 (Rev5, Built by MSYS2 project)
  configuration: --prefix=.. --disable-iconv --disable-opencl --disable-sdl2 --disable-bzlib --disable-lzma --disable-linux-perf --enable-shared --enable-version3 --enable-runtime-cpudetect --enable-zlib --enable-libmp3lame --enable-libspeex --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-openssl --enable-libopenh264 --enable-libvpx --enable-libfreetype --enable-libopus --enable-cuda --enable-cuvid --enable-nvenc --enable-libmfx --enable-w32threads --enable-indev=dshow --target-os=mingw32 --cc='gcc -m64' --extra-cflags=-I../include/ --extra-ldflags=-L../lib/ --extra-libs='-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lgcc_eh -lWs2_32 -lcrypt32 -lpthread -lz -lm -Wl,-Bdynamic -lole32 -luuid'
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
Input #0, image2, from 'C:\Users\yi\Desktop\2054011.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 255438 kb/s
    Stream #0:0: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 3840x2160, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> mjpeg (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'C:\Users\yi\Desktop\\d1013fbee79e4380a01c574addf72afb.jpg':
  Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Video: mjpeg, yuvj444p(pc), 1920x2160, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.91.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=    1 fps=0.0 q=10.4 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.201x    
video:234kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
C:\Users\yi\Desktop\\d1013fbee79e4380a01c574addf72afb.jpg

Process finished with exit code 0

结果图如下

OK,没什么问题。

总结

没啥好总结的,还是提醒一下,需要注意图片的尺寸,裁剪的时候不能超出尺寸范围。

分享:

我们赤着脚在自己的生命里行走,沿途无数的荆棘在等着你向前冲,它们在你的身上划出一道道伤口,让你痛,让你懂,教你怎样继续走。——《夏至未至》

如果本文对你有帮助的话,点个赞吧,谢谢!

Java 实现图片裁剪(附代码) | Java工具类相关推荐

  1. java鼠标图片裁剪,如何用Java中的鼠标指针捕获屏幕图像

    How to capture screen image with mouse pointer on it in Java? In know that i can capture screen with ...

  2. Java实现图片裁剪预览功能

    Java实现图片裁剪预览功能 在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章! 需要插件:jQuery Jcrop 后端代码: package org.csg.upload;imp ...

  3. java实现图片裁剪

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现图片裁剪,输入起点x.y,宽度width.高度height 测试代码 public static void main(String[] ...

  4. Java 图片添加数字暗水印工具类

    Java 图片添加数字暗水印工具类. package cnki.thesis.common.utils;import org.opencv.core.*;import java.util.ArrayL ...

  5. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  6. Java - HuTool 使用 EscapeUtil、XmlUtil等工具类(四)

    Java - HuTool 使用 EscapeUtil.XmlUtil等工具类(四) 本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我 ...

  7. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  8. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  9. java 手机号脱敏,身份证号脱敏 工具类

    java 手机号脱敏,身份证号脱敏 工具类 import org.apache.commons.lang3.StringUtils;/*** * @title: 脱敏工具类* @author: wll ...

  10. Java教程:微信排序并加密工具类

    Java教程:微信排序并加密工具类 源码: import cn.bsit.commons.md5.MD5Utils;import java.util.Arrays; import java.util. ...

最新文章

  1. Exchange 2007邮件服务器
  2. 混合云应用双活容灾实践
  3. Linux学习之系统编程篇:利用 setitimer 实现 alarm练习
  4. 前端权限控制:实现思路分析-待修改
  5. 有什么作用_轴套有什么作用?
  6. vue 打开一个iframe_Vue 之五 —— 单元测试
  7. 玩转oracle 11g(36):rman备份-控制文件丢失恢复
  8. Linux C高级编程——文件操作之库函数
  9. sata接口_解决主板SATA接口不足:乐扩PCIe2.0转8口SATA3/6G扩展卡
  10. Linux上的ffmpeg完全使用指南
  11. python黑色背景白色背景_用Python去除图像的黑色或白色背景实例
  12. 评分 - 2019寒假训练营第一次作业
  13. 字节码指令之控制转移指令
  14. 如何给页面添加背景音乐
  15. 利用Madmom识别和弦
  16. 出界的路径数----迭代问题与计算思维
  17. 一铲子下去,服务器全瘫痪......
  18. 超市收银软件测试自学,pos前台收银员培训 免费超市收银软件 视频教程
  19. TED | 怎样成为一个自律的人
  20. VB程序设计教程(第四版)龚沛曾-实验8-2

热门文章

  1. 使用python抓取App数据
  2. 绘图工具-PlantUML
  3. Twitter Storm: DRPC学习
  4. Tensorflow中的多层感知器学习
  5. Servlet 原理
  6. 《云原生入门级开发者认证》学习笔记之云原生基础设施之Kubernetes(三)
  7. ai python 自动_Python - AI自动抠图
  8. 推荐几款高性价比电机驱动芯片
  9. 【CISSP】安全运营
  10. MATLAB-ezplot绘图函数