仅使用 exiftool 获取 DateTimeOriginal

问题描述 投票:0回答:2

嘿社区,

几天以来,我在尝试获取 .jpg 或 .png 图像文件的拍摄日期时遇到了困难。 我相信它被称为DateTimeOriginal。 我想做的就是获取这一特定信息,DateTimeOriginal,不多也不少。

这是一个自制项目的一部分,一个按拍摄日期对照片进行排序的程序。 我正在使用 VB 进行编程,对于 exif 数据,我正在调用批处理文件。

所以我知道如何使用 exiftool。其常见用途是:

exiftool file.jpg
但我需要类似的东西:
exiftool -DateTimeOriginal file.jpg >> DateTaken.txt
我已经尝试过这个,但我没有得到日期,我只得到了目录中找到的任何 jpg 的列表,但没有元数据。 我一直在寻找这样的选项,但我找不到任何有用的东西。也许还有另一种更有效的方法来获取图像的元数据,仅使用 VB。

有人有建议或其他想法吗?

谢谢

vb.net batch-file exif exiftool
2个回答
3
投票

您有正确的命令从文件中获取

DateTimeOriginal
标签 (
exiftool -DateTimeOriginal file.jpg
)。但是您说您正在获取目录中的文件名列表,这听起来像是您传递的是目录名,而不是文件名。如果您只想为目录中具有标记值的文件获取
DateTimeOriginal
,请使用
exiftool -if "$DateTimeOriginal" -DateTimeOriginal C:/path/to/dir
。任何没有
DateTimeOriginal
的文件都不会列出。

需要注意的一件事是,Windows“拍摄日期”属性将根据文件类型由各种元数据标签填充。例如,在 PNG 文件中,Windows 将读取

PNG:CreationTime
。在 jpg 文件中,Windows 将读取
EXIF:DateTimeOriginal
IPTC:DateCreated + IPTC:TimeCreated
XMP:CreateDate
EXIF:CreateDate
,然后读取
XMP:DateTimeOriginal
标签。


0
投票

经过一番挖掘,我发现如果是位图,您可以获得属性列表。

不幸的是,属性 ID 是数字且相当神秘。

看看这里了解更多

经过进一步挖掘,似乎 propertyId &h132 (十六进制数)是以 ascii 编码存储为整数数组的日期。此函数查找 propertyid &h132 并以年:月:日期时:分:秒格式的字符串形式返回日期信息。

您可能会因本地化而有所不同。例如,使用

/
:
-
作为日期分隔符等,因此,要将其解析为日期类型,您可能需要解决这个问题。

Public Function GetImageTakenDate(theimage As Bitmap) As String
    Dim propItems As List(Of PropertyItem) = theimage.PropertyItems.ToList
    Dim dt As PropertyItem = propItems.Find(Function(x) x.Id = &H132)
    Dim datestring As String = ""
    For Each ch As Integer In dt.Value
        datestring += Chr(ch)
    Next
    datestring = datestring.Remove(datestring.Length - 1)
    Return datestring
End Function
© www.soinside.com 2019 - 2024. All rights reserved.