当前位置: 首页 > news >正文

javacv-ffmpeg ProcessBuilder批量旋转图片

javacv-ffmpeg ProcessBuilder实现对图片的旋转,最近需要处理很多图片,量有点多,所以不能一个一个去编辑旋转图片,所以写一个工具类,实现对图片的旋转

maven配置文件,加上对ffmpeg的依赖,由于ffmpeg依赖cpp,所以加上javacppjavacpp是可以支持调用c/c++方法的库。加上<classifier>标签,因为ffmpeg是基于c语言编写的,在不同平台上的编译结果不同,所以这个标签指定一下平台的类型

<dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.6</version><classifier>windows-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ffmpeg-platform</artifactId><version>4.4-1.5.6</version></dependency>

如果不想引入两个jar,可以直接引入javacv-platform,但是这个会引入其它的依赖

<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.5</version>
</dependency>

这里使用jdk中的ProcessBuilder 用于创建操作系统进程来运行程序,ProcessBuilder 是jdk提供的用于创建操作系统进程的类,使用Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);支持对ffmpeg(c语言编写)方法的调用

package com.example.common.util.file;import org.bytedeco.javacpp.Loader;
import java.text.MessageFormat;public class PictureProcess {/*** 旋转** @Date 2024/08/27 15:46* @Param imagePath 图片地址* @Param outputPath 输出地址* @Param angle 角度* @return java.lang.String 图片地址*/public static String rotate(String imagePath, String outputPath , Integer angle) throws Exception {String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);ProcessBuilder builder =new ProcessBuilder(ffmpeg,"-i",imagePath,"-vf",MessageFormat.format("rotate=PI*{0}/180", String.valueOf(angle)),"-y",outputPath);builder.inheritIO().start().waitFor();return outputDir;}
}

这里介绍一下弧度的计算公式:弧度= 角度 * Math.PI / 180 PI*{0}/180李的{0}是占位符,来传入角度的值

在这里插入图片描述

写个测试类,将文件夹里的所有图片都旋转90度

@Test
public void testProcess() {File file = new File("D:\\picture");File[] files = file.listFiles();String targetPath = "D:\\picture_NEW";for (File file1 : files) {System.out.println(rotate(file1.getPath(), targetPath +"/"+ file1.getName(), 90));}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch Suggesters API详解与联想词自动补全应用
  • Oracle rac模式下undo表空间爆满的解决
  • 公钥密码选择题
  • Cesium 台湾省白膜数据渲染
  • Java语言程序设计基础篇_编程练习题**17.17(BitOutputStream)
  • IBM退出中国,LabVIEW未来走向何方?
  • PostgreSQL技术内幕6:PostgreSQL索引技术
  • uniapp / uniapp x UI 组件库推荐大全
  • TCP/IP网络编程:第18章聊天室
  • 基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
  • fast-voice-assistant
  • BPE - Byte Pair Encoding
  • 带你速通C语言——局部与全局变量(15)
  • wmv怎么转换成视频mp4?简单的几种视频格式转换方法
  • 2024最新comfyui保姆级教程来啦!comfyui工作流搭建看这一篇就够了!
  • 【技术性】Search知识
  • css选择器
  • git 常用命令
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js操作时间(持续更新)
  • Js基础知识(一) - 变量
  • LeetCode算法系列_0891_子序列宽度之和
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 关于字符编码你应该知道的事情
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何设计一个微型分布式架构?
  • 收藏好这篇,别再只说“数据劫持”了
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我从编程教室毕业
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​zookeeper集群配置与启动
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)vue-router+UI组件库
  • (四)Android布局类型(线性布局LinearLayout)
  • (算法二)滑动窗口
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net 高效开发之不可错过的实用工具
  • .net 无限分类
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net和php怎么连接,php和apache之间如何连接