大家好,今天给各位分享高效批量处理:Java实现EXIF信息提取与文件重命名的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
原始照片或视频带有EXIF信息。该信息是设备在拍摄时生成的,记录了照片的拍摄时间、设备信息、拍摄GPS位置等信息,可以在文件属性中查看:
20210423003430.png图片APP和网盘软件中的图片时间线也是通过提取EXIF信息生成的。如果对照片进行处理,比如美化,保存时EXIF信息可能会丢失,或者EXIF信息可能被重写,导致识别信息不准确。
之前备份的照片大部分都是原来的文件名,现在想根据拍摄日期批量重命名。
经过一番查找,发现老牌的图片查看软件ADSee有这个功能:
20210423004238.png 但有几个问题:
不排除EXIF文件丢失的可能。此类文件无法重命名。下载并安装官方ADSee免费版后,您需要注册一个帐户才能使用。于是我开始使用JAVA代码来实现这个小功能。
开源项目元数据提取器用于提取EXIF信息,支持市面上常见的媒体文件格式和设备:
20210423004839.png元数据提取器官方网站:https://drewnoakes.com/code/exif/
引入依赖:
com.drewnoakesmetadata-extractor2.15.0官方阅读示例代码:
元数据元数据=ImageMetadataReader.readMetadata(file);
for (目录目录:metadata.getDirectories()) {
for (标签标签:目录.getTags()) {
System.out.format("[%s] - %s=%s n",
目录.getName(), tag.getTagName(), tag.getDescription());
}
if (directory.hasErrors()) {
for (字符串错误: 目录.getErrors()) {
System.err.format("ERROR: %s", 错误);
}
}
}以下是使用示例代码读取图像输出的部分结果:
20210423005111.png 其中Date/Time Original就是我想要获取的拍摄日期。
代码如下:
/**
* 如果是目录,则递归查找
* @param file 文件或目录
*/
公共静态无效递归(文件文件){
if (file.isDirectory()) {
//目录
文件[] fileList=file.listFiles();
for (文件f : 文件列表) {
递归(f);
}
} 别的{
//文档
if (file.isFile()) {
//格式:2019:06:27 11:23:55 或2019:07:13 19:07:42pm
字符串originDateTime=getOriginDateTime(文件);
if (null !=originDateTime) {
int lastDoc=file.getPath().lastIndexOf(".");
字符串后缀=file.getPath().substring(lastDoc);
String fileName=originDateTime.replace("PM", "").replaceAll(":", "-") + 后缀;
文件newFile=new File(file.getParentFile(), fileName);
if (newFile.exists()) {
System.out.format("文件[%s]已存在n", newFile.getPath());
} 别的{
System.out.format("重命名【%s】-【%s】n", file.getPath(), newFile.getPath());
文件.renameTo(newFile);
}
} 别的{
System.out.format("在文件[%s]中未找到原始日期时间信息n", file.getPath());
}
}
}
}
/**
* 提取拍摄日期
* @参数文件
* @返回
*/
公共静态字符串getOriginDateTime(文件文件){
字符串起源日期时间=null;
尝试{
元数据元数据=ImageMetadataReader.readMetadata(file);
for (目录目录:metadata.getDirectories()) {
for (标签标签:目录.getTags()) {
if ("原始日期/时间".equals(tag.getTagName())) {
//System.out.format("[%s] - %s=%s n",
//目录.getName(), tag.getTagName(), tag.getDescription());
originDateTime=tag.getDescription();
}
}
if (directory.hasErrors()) {
for (字符串错误: 目录.getErrors()) {
System.err.format("ERROR: %s %s n", error, file.getPath());
}
}
}
} catch (异常e) {
e.printStackTrace();
}
返回原点日期时间;
}主要方法测试:
公共静态无效主(字符串[] args)抛出ImageProcessingException,IOException {
recursion(new File("图片目录"));
}执行结果:
【高效批量处理:Java实现EXIF信息提取与文件重命名】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这听起来是个好用的工具啊!我有很多照片需要整理名称。
有11位网友表示赞同!
java 真是一门让人爱不释手的语言,功能强大!
有20位网友表示赞同!
我平时也喜欢用 EXIF 信息来标注图片时间地点,方便查询。
有9位网友表示赞同!
批量重命名效率最高了!省去很多手动操作的麻烦。
有13位网友表示赞同!
不知道这个工具能不能处理中文文件名?
有20位网友表示赞同!
期待看看详细的操作流程,学习一下这方面的技巧!
有12位网友表示赞同!
照片管理一直是我头疼的问题,这下找到了神器了!
有5位网友表示赞同!
EXIF 信息能提取很多有趣的数据啊,像相机型号,拍摄时间等等。
有15位网友表示赞同!
有没有什么 GUI 软件可以直接操作呢?我更习惯操作图形界面。
有5位网友表示赞同!
如果可以自定义命名规则就更好了,比如加年份或者序列号。
有10位网友表示赞同!
批量处理图片总是比单张处理快很多啊!
有10位网友表示赞同!
学习一下代码,试试自己实现一个类似的工具!
有9位网友表示赞同!
有了这个工具,整理照片就能轻松愉快多了。
有8位网友表示赞同!
对摄影爱好者来说,EXIF 信息非常有用,特别是想做一些后期的整理和分析。
有12位网友表示赞同!
这种工具在媒体制作中也会派上用场吧!可以批量调整图片文件名。
有6位网友表示赞同!
希望开源社区有更多类似的实用工具!
有5位网友表示赞同!
分享这个软件到我的群里,大家应该也会非常感兴趣!
有16位网友表示赞同!
我最近正好需要做一个照片分类的任务,这正好派上用场!
有8位网友表示赞同!
期待看看作者的后续发文,了解更多关于这个工具的信息。
有20位网友表示赞同!