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)文章
Spring Boot整合消息隊列RabbitMQ的實現(xiàn)示例
本文主要介紹了Spring Boot整合消息隊列RabbitMQ的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
mybatis中映射文件(mapper)中的使用規(guī)則
這篇文章主要介紹了mybatis中映射文件(mapper)中的使用規(guī)則,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
springboot2中HikariCP連接池的相關(guān)配置問題
這篇文章主要介紹了springboot2中HikariCP連接池的相關(guān)配置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Java?String類和StringBuffer類的區(qū)別介紹
這篇文章主要介紹了Java?String類和StringBuffer類的區(qū)別,?關(guān)于java的字符串處理我們一般使用String類和StringBuffer類有什么不同呢,下面我們一起來看看詳細介紹吧2022-03-03
基于java swing實現(xiàn)答題系統(tǒng)
這篇文章主要為大家詳細介紹了基于java swing實現(xiàn)答題系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解
這篇文章主要介紹了JAVA調(diào)用SAP WEBSERVICE服務(wù)實現(xiàn)流程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
JeecgBoot頁面Online報表配置過程(動態(tài))
文章介紹了如何根據(jù)登錄者角色信息動態(tài)配置報表,并詳細說明了Online報表的配置步驟,包括數(shù)據(jù)源選擇、字段顯示、查詢條件設(shè)置等,同時,文章還涉及了頁面代碼部分,包括依賴引入、用戶信息獲取、參數(shù)配置和form表單配置等2026-01-01
SpringBoot中六種批量更新Mysql的方式效率對比分析
文章比較了MySQL大數(shù)據(jù)量批量更新的多種方法,指出REPLACE INTO和ON DUPLICATE KEY效率最高但存在數(shù)據(jù)風(fēng)險,MyBatis-Plus分批更新較優(yōu),CASE WHEN因循環(huán)多效率較低,建議根據(jù)項目限制選擇合適方案并分批處理以避免SQL阻塞2025-07-07
基于HttpServletResponse 相關(guān)常用方法的應(yīng)用
本篇文章小編為大家介紹,基于HttpServletResponse 相關(guān)常用方法的應(yīng)用,需要的朋友參考下2013-04-04

