javacv-ffmpeg ProcessBuilder批量旋转图片方式
javacv-ffmpeg ProcessBuilder批量旋转图片
javacv-ffmpeg ProcessBuilder实现对图片的旋转,最近需要处理很多图片,量有点多,所以不能一个一个去编辑旋转图片
写一个工具类,实现对图片的旋转
maven配置文件,加上对ffmpeg的依赖,由于ffmpeg依赖cpp,所以加上javacpp,javacpp是可以支持调用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));
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot整合消息队列RabbitMQ的实现示例
本文主要介绍了Spring Boot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-03-03
springboot2中HikariCP连接池的相关配置问题
这篇文章主要介绍了springboot2中HikariCP连接池的相关配置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12
Java String类和StringBuffer类的区别介绍
这篇文章主要介绍了Java String类和StringBuffer类的区别, 关于java的字符串处理我们一般使用String类和StringBuffer类有什么不同呢,下面我们一起来看看详细介绍吧2022-03-03
SpringBoot中六种批量更新Mysql的方式效率对比分析
文章比较了MySQL大数据量批量更新的多种方法,指出REPLACE INTO和ON DUPLICATE KEY效率最高但存在数据风险,MyBatis-Plus分批更新较优,CASE WHEN因循环多效率较低,建议根据项目限制选择合适方案并分批处理以避免SQL阻塞2025-07-07
基于HttpServletResponse 相关常用方法的应用
本篇文章小编为大家介绍,基于HttpServletResponse 相关常用方法的应用,需要的朋友参考下2013-04-04


最新评论