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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

81、k8s网络配置以及k8s拉取私有仓库

一、k8s架构安装部署 k8s架构master 192.168.168.81 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.168.82 docker kubeadm kubelet kubectl flannel node02 192.168.168.83 docker、kubeadm、kubelet、kubectl、flannel#关闭防火墙 [rootk8s1 ~]# sys…

EmguCV学习笔记 VB.Net 7.1 角点检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【负载均衡式在线OJ】项目设计

文章目录 程序源码用到的技术项目宏观结构代码编写思路 程序源码 https://gitee.com/not-a-stupid-child/online-judge 用到的技术 C STL 标准库。Boost 准标准库(字符串切割)。cpp-httplib 第三方开源网络库。ctemplate 第三方开源前端网页渲染库。jsoncpp 第三方开源序列化…

netty编程之结合springboot一起使用

写在前面 源码 。 本文看下netty结合springboot如何使用。 1&#xff1a;netty server部分 server类&#xff08;不要main&#xff0c;后续通过springboot来启动咯!&#xff09;&#xff1a; package com.dahuyou.netty.springboot.server;import io.netty.bootstrap.Serve…

Python实现t-分布随机邻域嵌入(t-SNE)降维算法

目录 Python实现t-分布随机邻域嵌入&#xff08;t-SNE&#xff09;降维算法的博客引言t-SNE算法原理t-SNE的优势与局限Python实现t-SNE算法1. 创建t-SNE类2. 示例场景&#xff1a;MNIST手写数字数据集3. 结果分析 结论运行结果 Python实现t-分布随机邻域嵌入&#xff08;t-SNE&…

2024上海初中生古诗文大会备考:单选题真题和每道题独家解析

新学年开学倒计时了&#xff0c;也意味着上海中小学生的几项传统赛事即将拉开帷幕了。 其中&#xff0c;2024年初中生古诗文大会初选还有2个多月&#xff08;官宣了11月3日线上初选正式开赛&#xff09;&#xff0c;我们来看10道历年的选择题真题和详细解析。为帮助孩子自测和…

模型 KT决策法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。系统分析&#xff0c;明智选择。 1 KT决策法的应用 1.1 餐饮连锁店菜单更新 一家餐饮连锁店计划更新菜单&#xff0c;以吸引更多顾客并提高销售额。使用 KT 决策法&#xff08;Kepner-Tregoe&#x…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent&#xff1a;click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

python可视化-密度图

1、加载数据 import pandas as pd import numpy as np from sklearn.datasets import load_iris import warnings# 禁用所有警告信息 warnings.filterwarnings(ignore)# 加载数据 iris load_iris() iris iris.keys() df pd.DataFrame(iris.data, columnsiris.feature_names)…

mac nvm安装及使用(nvm安装指定版本node npm pnpm)

mac nvm安装及使用&#xff08;nvm安装指定版本node npm pnpm&#xff09; 1.卸载电脑的node 打开终端&#xff1a;依次执行以下命令&#xff1a; sudo rm -rf /usr/local/bin/npm sudo rm -rf /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/lib/dtrace/node.d s…

开源word文档相似度对比 软件WinMerge

WinMerge 官网下载 &#xff1a;GitHub - WinMerge/winmerge: WinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and hand…

API网关之Kong

Kong 是一个高性能的开源 API 网关和微服务管理平台&#xff0c;用于管理、保护和扩展 API 和微服务。它最初由 Mashape 公司开发&#xff0c;并于 2015 年作为开源项目发布。Kong 能够处理 API 的路由、认证、负载均衡、缓存、监控、限流等多种功能&#xff0c;是微服务架构中…

网络应用层之(2)DNS协议

网络应用层之(2)DNS协议 Author: Once Day Date: 2024年8月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

PyTorch深度学习网络(二:CNN)

卷积神经网络&#xff08;CNN&#xff09;是一种专门用于处理具有类似网格结构数据的深度学习模型&#xff0c;例如图像&#xff08;2D网格的像素&#xff09;和时间序列数据&#xff08;1D网格的信号强度&#xff09;。CNN在图像识别、图像分类、物体检测、语音识别等领域有着…

R语言绘制可用于论文发表的生存曲线图|科研绘图·24-08-25

小罗碎碎念 有关于生存曲线的基本概念&#xff08;例如删失事件的定义&#xff09;和绘图的详细教程我已经在5月的推文中介绍过了&#xff0c;有需求的同学欢迎前去考古。 R语言绘制生存分析曲线从概念到实战的保姆级教程&#xff5c;2024-05-12 https://mp.weixin.qq.com/s/Z…

SQL进阶技巧:如何按任意时段分析时间区间问题? | 分区间讨论【左、中、右】

目录 0 场景描述 1 数据准备 2 问题分析 方法1:分情况讨论,找出重叠区间 方法2:暴力美学法。按区间展开成日期明细表 3 拓展案例 4小结 0 场景描述 现有用户还款计划表 user_repayment ,该表内的一条数据,表示用户在指定日期区间内 [date_start, date_end] ,每天…

秋招突击——8/21——知识补充——计算机网络——cookie、session和token

文章目录 引言正文Cookie——客户端存储和管理Session——服务端存储和管理Token补充签名和加密的区别常见的加密算法和签名算法 面试题1、HTTP用户后续的操作&#xff0c;服务端如何知道属于同一个用户&#xff1f;如果服务端是一个集群机器怎么办&#xff1f;2、如果禁用了Co…

【Python 千题 —— 基础篇】简易图书管理系统

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 编写一个面向对象的程序,模拟一个图书管理系统。要求定义一个 Book 类,具有基本的书籍信息功能;然后,创建一个 Library 类,用于管理多个 B…

Vue3搜索框(InputSearch)

效果如下图&#xff1a;在线预览 APIs InputSearch 参数说明类型默认值width搜索框宽度&#xff0c;单位 pxstring | number‘100%’icon搜索图标boolean | slottruesearch搜索按钮&#xff0c;默认时为搜索图标string | slotundefinedsearchProps设置搜索按钮的属性&#xf…

【Qt】容器类控件GroupBox

容器类控件GroupBox 使用QGroupBox实现一个带有标题的分组框&#xff0c;可以把其他的控件放在里面里面作为一组&#xff0c;这些内部的控件的父元素也就不是this了。 其目的只是为了让界面看起来更加好看&#xff0c;例如当一个界面比较复杂的时候&#xff0c;包含了很多的控…