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));
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论