色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Java 提取照片的EXIF信息批量重命名

瀏覽:4日期:2022-08-13 18:09:02

手機或照機拍攝的照片名稱通常是”IMG_001.JPG”這種格式,這種文件名稱是無意義的。使用照片拍攝時間命名可以讓我們在多年以后查找照片時根據文件名就能快速篩選出某一時間段的照片。

原始照片或視頻是帶有EXIF信息的。這些信息是設備在拍攝時生成,記錄了照片的拍攝時間,設備信息,拍攝GPS位置等信息,在文件屬性中可以查看到:

Java 提取照片的EXIF信息批量重命名

圖片APP和網盤軟件中圖片時間線也是提取EXIF信息生成的。如果對照片進行處理,如美化操作,另存為時可能會丟失EXIF信息,或者EXIF信息被改寫,會導致識別信息不準。

我以前備份的照片,大多是原始文件名,現在我想根據拍攝日期批量重命名。

找了一圈,發現老牌看圖軟件ADSee帶有這個功能:

Java 提取照片的EXIF信息批量重命名

但是存在幾個問題:

不能排除已丟失EXIF的文件,這類的文件無法重命名 官方ADSee免費版下載安裝后,要注冊賬號才能使用

于是動動手,用JAVA代碼實現這個小功能。

提取EXIF信息使用的是開源項目 metadata extractor ,它支持市面上常見的媒體文件格式和設備:

Java 提取照片的EXIF信息批量重命名

metadata extractor 官網:https://drewnoakes.com/code/exif/

引入依賴:

<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.15.0</version></dependency>

官方讀取示例代碼:

Metadata metadata = ImageMetadataReader.readMetadata(file);for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) {System.out.format('[%s] - %s = %s n', directory.getName(), tag.getTagName(), tag.getDescription()); } if (directory.hasErrors()) {for (String error : directory.getErrors()) { System.err.format('ERROR: %s', error);} }}

以下是我使用示例代碼讀取一張圖片輸出的部分結果:

Java 提取照片的EXIF信息批量重命名

其中 Date/Time Original 就是我要取的攝像日期。

代碼如下:

/** * 如果是目錄則遞歸查找 * @param file 文件或目錄 */public static void recursion(File file) { if (file.isDirectory()) {// 目錄File[] fileList = file.listFiles();for (File f : fileList) { recursion(f);} } else {// 文件if (file.isFile()) { // 格式:2019:06:27 11:23:55 或 2019:07:13 19:07:42下午 String originDateTime = getOriginDateTime(file); if (null != originDateTime) {int lastDoc = file.getPath().lastIndexOf('.');String suffix = file.getPath().substring(lastDoc);String fileName = originDateTime.replace('下午', '').replaceAll(':', '-') + suffix;File newFile = new File(file.getParentFile(), fileName);if (newFile.exists()) { System.out.format('文件【%s】已存在 n', newFile.getPath());} else { System.out.format('重命名【%s】 -> 【%s】 n', file.getPath(), newFile.getPath()); file.renameTo(newFile);} } else {System.out.format('文件【%s】中未找到 Origin DateTime 信息 n', file.getPath()); }} }}/** * 提取拍攝日期 * @param file * @return */public static String getOriginDateTime(File file) { String originDateTime = null; try {Metadata metadata = ImageMetadataReader.readMetadata(file);for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) {if ('Date/Time Original'.equals(tag.getTagName())) {//System.out.format('[%s] - %s = %s n',//directory.getName(), tag.getTagName(), tag.getDescription()); originDateTime = tag.getDescription();} } if (directory.hasErrors()) {for (String error : directory.getErrors()) { System.err.format('ERROR: %s %s n', error, file.getPath());} }} } catch (Exception e) {e.printStackTrace(); } return originDateTime;}

Main方法測試:

public static void main(String[] args) throws ImageProcessingException, IOException { recursion(new File('圖片目錄'));}

執行結果:

Java 提取照片的EXIF信息批量重命名

可以根據自己需求重寫重命名方法。比如在拍攝日期相同時加上一個自增數。

以上就是Java 提取照片的EXIF信息批量重命名的詳細內容,更多關于Java 提取EXIF信息重命名的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲一区二区三区中文字幕 | 免费在线观看一区 | 午夜成人在线视频 | 女人张开腿让男人桶免费网站 | 免费看三级毛片 | 一级爱爱片一级毛片-一毛 一级爱做片免费观看久久 一级白嫩美女毛片免费 | 怡红院精品视频 | 日本三级欧美三级人妇英文 | 一本大道香蕉久在线不卡视频 | 久久视屏这里只有精品6国产 | 亚洲日本va午夜中文字幕 | 成人免费手机在线看网站 | 毛片一级做a爰片性色 | 日本午夜小视频 | 国产精品久久久影院 | 国产第2页 | 日韩精品一级a毛片 | 美国毛片基地a级e片 | 欧美精品成人一区二区视频一 | 国产午夜精品免费一二区 | 亚洲碰碰 | 爱啪网亚洲第一福利网站 | 国产成人在线看 | 女人精aaaa片一级毛片女女 | 香蕉久久成人网 | 国产99视频精品一区 | 成人久久久久久 | 久久高清精品 | 午夜影院h | 国产成人cao在线 | 男人女人做黄刺激性视频免费 | 亚洲精品久久久中文字 | 俄罗斯一级成人毛片 | 亚洲一区二区三区高清视频 | 国产成人爱片免费观看视频 | 日韩高清一区二区 | 日韩三级免费看 | 日本一在线中文字幕天堂 | 亚洲wu码| 国产区一区二区三 | 一级a级国产不卡毛片 |