javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式
javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片
javacv-ffmpeg ProcessBuilder實現(xiàn)對圖片的旋轉(zhuǎn),最近需要處理很多圖片,量有點多,所以不能一個一個去編輯旋轉(zhuǎn)圖片
寫一個工具類,實現(xiàn)對圖片的旋轉(zhuǎn)
maven配置文件,加上對ffmpeg的依賴,由于ffmpeg依賴cpp,所以加上javacpp,javacpp是可以支持調(diào)用c/c++方法的庫。
加上<classifier>標簽,因為ffmpeg是基于c語言編寫的,在不同平臺上的編譯結(jié)果不同,所以這個標簽指定一下平臺的類型
<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 用于創(chuàng)建操作系統(tǒng)進程來運行程序,ProcessBuilder 是jdk提供的用于創(chuàng)建操作系統(tǒng)進程的類,
使用
Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
支持對ffmpeg(c語言編寫)方法的調(diào)用
package com.example.common.util.file;
import org.bytedeco.javacpp.Loader;
import java.text.MessageFormat;
public class PictureProcess {
/**
* 旋轉(zhuǎn)
*
* @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}是占位符,來傳入角度的值

寫個測試類
將文件夾里的所有圖片都旋轉(zhuǎn)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));
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot如何根據(jù)docx填充生成word文件并導出pdf
這篇文章主要介紹了Springboot如何根據(jù)docx填充生成word文件并導出pdf問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Java使用Thread創(chuàng)建多線程并啟動操作示例
這篇文章主要介紹了Java使用Thread創(chuàng)建多線程并啟動操作,結(jié)合實例形式分析了Java基于Thread類的多線程定義與啟動簡單操作技巧,需要的朋友可以參考下2018-06-06
SpringBoot集成Redisson操作Redis的實現(xiàn)方法
Redisson是一個用于Java的Redis客戶端,它提供了在分布式環(huán)境下操作Redis數(shù)據(jù)庫的簡單、高效的方式,本文主要介紹了SpringBoot集成Redisson操作Redis的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2024-03-03
解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題
這篇文章主要介紹了解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot使用Maven實現(xiàn)多環(huán)境配置管理
軟件開發(fā)中經(jīng)常有開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,而且一般這些環(huán)境配置會各不相同,本文主要介紹了SpringBoot使用Maven實現(xiàn)多環(huán)境配置管理,感興趣的可以了解一下2024-01-01
springboot集成JWT之雙重token的實現(xiàn)
本文主要介紹了springboot集成JWT之雙重token的實現(xiàn),前端使用accessToken進行登錄和驗證,后端使用refreshToken定期更新accessToken,具有一定的參考價值,感興趣的可以了解一下2025-03-03
SpringBoot+SpringSecurity實現(xiàn)認證的流程詳解
這篇文章主要介紹了SpringBoot+SpringSecurity實現(xiàn)認證的流程,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-05-05

