当前位置: 代码网 > it编程>编程语言>Java > javacv-ffmpeg ProcessBuilder批量旋转图片方式

javacv-ffmpeg ProcessBuilder批量旋转图片方式

2024年09月24日 Java 我要评论
javacv-ffmpeg processbuilder批量旋转图片javacv-ffmpeg processbuilder实现对图片的旋转,最近需要处理很多图片,量有点多,所以不能一个一个去编辑旋转

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));
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com