开发者

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&编程客栈gt;
        <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 out编程客栈putPath , 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}是占位符,来传入角度的值

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

    写个测试类

    将文件夹里的所有图片都旋转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));
        }
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大www.devze.com家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜