千家信息网

Java是怎么实现图片裁剪功能的

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,今天就跟大家聊聊有关Java是怎么实现图片裁剪功能的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言下面提供将图片按照自定义尺寸进行裁剪的J
千家信息网最后更新 2024年09月22日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安全错误 数据库的锁怎样保障安全 网络安全与技术学院分数线 php连接数据库示例 gpu高密度服务器简介 大学学习计算机网络技术的基础 服务器安全策略怎么取消 数据中心用1u服务器的多吗 四川省国家网络安全局 出一期网络安全手抄报 软件开发专业做什么的 数据库建设应该学什么专业 天长工业软件开发技术怎么样 计算机网络安全与管理知识点 战舰世界登录显示无法连接服务器 云原生 数据库 售前 招聘 贵州特时新互联网科技有限公司 软件开发超税负即征即退 wincc数据存到数据库 网络安全保险风险评估标准 网络安全软考全称 新华三服务器是国产吗 查看某个数据库的所有表 能通过下载链接找到服务器吗 网络技术与设计专业好吗 无线网无法访问服务器 北京数据网络技术分类五星服务 数据库优化计数 数据库有条件单表查询 发现不了数据库尾号 网络安全技术是干什么的 关闭445端口对服务器
0