javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式
javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片
javacv-ffmpeg ProcessBuilder實(shí)現(xiàn)對(duì)圖片的旋轉(zhuǎn),最近需要處理很多圖片,量有點(diǎn)多,所以不能一個(gè)一個(gè)去編輯旋轉(zhuǎn)圖片
寫一個(gè)工具類,實(shí)現(xiàn)對(duì)圖片的旋轉(zhuǎn)
maven配置文件,加上對(duì)ffmpeg的依賴,由于ffmpeg依賴cpp,所以加上javacpp,javacpp是可以支持調(diào)用c/c++方法的庫(kù)。
加上<classifier>標(biāo)簽,因?yàn)?code>ffmpeg是基于c語(yǔ)言編寫的,在不同平臺(tái)上的編譯結(jié)果不同,所以這個(gè)標(biāo)簽指定一下平臺(tái)的類型
<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>如果不想引入兩個(gè)jar,可以直接引入javacv-platform,但是這個(gè)會(huì)引入其它的依賴
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.5</version>
</dependency>這里使用jdk中的ProcessBuilder 用于創(chuàng)建操作系統(tǒng)進(jìn)程來(lái)運(yùn)行程序,ProcessBuilder 是jdk提供的用于創(chuàng)建操作系統(tǒng)進(jìn)程的類,
使用
Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
支持對(duì)ffmpeg(c語(yǔ)言編寫)方法的調(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;
}
}
介紹一下弧度的計(jì)算公式
弧度= 角度 * Math.PI / 180 ,PI*{0}/180李的{0}是占位符,來(lái)傳入角度的值

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

