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