Java是怎么实现图片裁剪功能的
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,今天就跟大家聊聊有关Java是怎么实现图片裁剪功能的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言下面提供将图片按照自定义尺寸进行裁剪的J
千家信息网最后更新 2025年11月10日Java是怎么实现图片裁剪功能的
今天就跟大家聊聊有关Java是怎么实现图片裁剪功能的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
前言
下面提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。
Maven依赖
com.google.guava guava 30.1.1-jre org.bytedeco javacv-platform 1.5.5 cn.hutool hutool-all 5.5.2
代码
不废话,上代码。
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 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-libopenh364 --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.100Input #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 tbcStream mapping: Stream #0:0 -> #0:0 (mjpeg (native) -> mjpeg (native))Press [q] to stop, [?] for helpOutput #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/Aframe= 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: unknownC:\Users\yi\Desktop\\d1013fbee79e4380a01c574addf72afb.jpgProcess finished with exit code 0
结果图如下
java基本数据类型有哪些
Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是"char"。4、布尔类型,是表示逻辑值的基本数据类型。
看完上述内容,你们对Java是怎么实现图片裁剪功能的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
类型
图片
数据
坐标
起始
内容
功能
代码
字符
宽度
尺寸
工具
整数
目录
结果
需求
高度
调整
输出
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银行网络安全承诺
黑魂三登录服务器有什么用
上海安装网络技术服务
广东综合软件开发单价
奶糖网络技术有限公司
软件开发的税负率
怎么安装tomcat服务器
大数据与网络技术应用
靶场目标信息网络技术
亚马逊客服服务器维护多久一次
服务器端安密码锁是什么意思
邯郸安卓软件开发哪家便宜
河南正规软件开发定制费用
搭建域名解析服务器
jar文件连接数据库
系统开发数据库性能
一期二期软件开发合同
dcom服务器占内存
量境网络技术有限公司
怎么让数据库可以远程访问
计算机网络技术盛立军答案
伊利丹服务器
服务器能用pe清除密码吗
mql数据库技术
警察院校 网络安全
手机服务器有延迟怎么办
广东戴尔服务器虚拟化建设
组态软件的实时数据库
远程连接服务器的端口号
创建数据源连接数据库失败