嗨社区,
几天后,我在试图获取.jpg或.png图像文件的日期时被卡住,拍照时。 我相信它被称为 DateTimeOriginal 。 我正在尝试做的只是获取这一个特定的信息, DateTimeOriginal ,而不是更多,而不是更少。
这是自制项目的一部分,该项目是按拍摄日期对照片进行分类的程序。 我正在用VB编程,对于exif数据我正在调用批处理文件。
所以我知道如何使用exiftool。它的常见用途是:
exiftool file.jpg
但是我需要这样的东西:
exiftool -DateTimeOriginal file.jpg >> DateTaken.txt
我试过这个,但是我没有得到Date,我只得到了目录中找到的任何jpg的列表,但是没有元数据。
我正在寻找这样的任何选项,但我找不到任何有用的东西。也许还有另一种更有效的方法来获取图像的元数据,只使用VB。
有没有人提出建议或其他想法?
感谢
答案 0 :(得分:1)
您拥有从文件(exiftool -DateTimeOriginal file.jpg
)获取DateTimeOriginal
标记的正确命令。但是你说你在目录中得到一个文件名列表,这听起来像是在传递一个目录名,而不是一个文件名。如果您希望exiftool -if "$DateTimeOriginal" -DateTimeOriginal C:/path/to/dir
仅获取目录中具有标记值的文件,请使用DateTimeOriginal
。那时没有列出任何没有PNG:CreationTime
的文件。
需要注意的一点是,Windows“Date Taken”属性将由各种元数据标签填充,具体取决于文件类型。例如,在PNG文件中,Windows将使用EXIF:DateTimeOriginal
。在jpg文件中,Windows将依次使用IPTC:DateCreated + IPTC:TimeCreated
,XMP:CreateDate
,EXIF:CreateDate
,XMP:DateTimeOriginal
和{{1}}标记。
答案 1 :(得分:0)
经过一番挖掘后,我发现如果是位图,你可以获得一个属性列表。
不幸的是,属性ID是数字的而且非常神秘。
查看here以了解更多信息
经过多挖掘后,似乎propertyId& h132(十六进制数)是ascii编码中存储为整数数组的日期。此函数查找propertyid& h132并将日期信息作为字符串返回year:month:date hour:minute:second format。
您可能会获得本地化的变体...例如,使用 string input = file.Name;
string input2 = file.Name;
int indexInterval = input.IndexOf("+");
int indexDate = input2.IndexOf("_");
if (indexInterval > 0)
input = input.Substring(0, indexInterval);
if (indexDate > 0)
input2 = input2.Substring(0, indexDate);
string newInterval = input;
string newDate = input2;
,/
或:
作为日期分隔符等,因此,要将其解析为日期类型,您可能需要解决这个问题。
-