javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式
javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片
javacv-ffmpeg ProcessBuilder實(shí)現(xiàn)對圖片的旋轉(zhuǎn),最近需要處理很多圖片,量有點(diǎn)多,所以不能一個(gè)一個(gè)去編輯旋轉(zhuǎn)圖片
寫一個(gè)工具類,實(shí)現(xiàn)對圖片的旋轉(zhuǎn)
maven配置文件,加上對ffmpeg
的依賴,由于ffmpeg
依賴cpp
,所以加上javacpp
,javacpp
是可以支持調(diào)用c/c++
方法的庫。
加上<classifier>
標(biāo)簽,因?yàn)?code>ffmpeg是基于c語言
編寫的,在不同平臺上的編譯結(jié)果不同,所以這個(gè)標(biāo)簽指定一下平臺的類型
<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è)會引入其它的依賴
<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.5</version> </dependency>
這里使用jdk中的ProcessBuilder
用于創(chuàng)建操作系統(tǒng)進(jìn)程來運(yùn)行程序,ProcessBuilder
是jdk提供的用于創(chuàng)建操作系統(tǒng)進(jìn)程的類,
使用
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; } }
介紹一下弧度的計(jì)算公式
弧度= 角度 * Math.PI / 180
,PI*{0}/180
李的{0}
是占位符,來傳入角度的值
寫個(gè)測試類
將文件夾里的所有圖片都旋轉(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問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Java使用Thread創(chuàng)建多線程并啟動操作示例
這篇文章主要介紹了Java使用Thread創(chuàng)建多線程并啟動操作,結(jié)合實(shí)例形式分析了Java基于Thread類的多線程定義與啟動簡單操作技巧,需要的朋友可以參考下2018-06-06SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法
Redisson是一個(gè)用于Java的Redis客戶端,它提供了在分布式環(huán)境下操作Redis數(shù)據(jù)庫的簡單、高效的方式,本文主要介紹了SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Java倒計(jì)時(shí)三種實(shí)現(xiàn)方式代碼實(shí)例
這篇文章主要介紹了Java倒計(jì)時(shí)三種實(shí)現(xiàn)方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題
這篇文章主要介紹了解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot使用Maven實(shí)現(xiàn)多環(huán)境配置管理
軟件開發(fā)中經(jīng)常有開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,而且一般這些環(huán)境配置會各不相同,本文主要介紹了SpringBoot使用Maven實(shí)現(xiàn)多環(huán)境配置管理,感興趣的可以了解一下2024-01-01springboot集成JWT之雙重token的實(shí)現(xiàn)
本文主要介紹了springboot集成JWT之雙重token的實(shí)現(xiàn),前端使用accessToken進(jìn)行登錄和驗(yàn)證,后端使用refreshToken定期更新accessToken,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程詳解
這篇文章主要介紹了SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05