Vb.net 仅使用exiftool获取DateTimeOriginal

Vb.net 仅使用exiftool获取DateTimeOriginal,vb.net,batch-file,exif,exiftool,Vb.net,Batch File,Exif,Exiftool,嘿,社区, 因为有几天我在尝试获取.jpg或.png图像文件的拍摄日期时遇到了麻烦。 我相信它叫DateTimeOriginal。 我想做的是,只获取一个特定的信息,DateTimeOriginal,不是更多,不是更少 这是一个自制项目的一部分,一个按照片拍摄日期排序的程序。 我用VB编程,对于exif数据,我调用一个批处理文件 所以我知道如何使用exiftool。它的常见用途是: exiftool文件.jpg 但我需要这样的东西: exiftool-DateTimeOriginal file.

嘿,社区,

因为有几天我在尝试获取.jpg或.png图像文件的拍摄日期时遇到了麻烦。 我相信它叫DateTimeOriginal。 我想做的是,只获取一个特定的信息,DateTimeOriginal,不是更多,不是更少

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

所以我知道如何使用exiftool。它的常见用途是:
exiftool文件.jpg
但我需要这样的东西:
exiftool-DateTimeOriginal file.jpg>>datetake.txt
我试过这个,但我没有得到日期,我只得到了目录中找到的任何jpg的列表,但没有元数据。 我一直在寻找这样的选择,但我找不到任何有用的。也许还有另一种更有效的方法来获取图像的元数据,仅使用VB

有人有什么建议或其他想法吗


谢谢

经过一番挖掘后,我发现如果使用位图,可以获得属性列表

不幸的是,属性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

经过一点挖掘,我发现你可以得到一个属性列表,如果位图

不幸的是,属性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

您拥有从文件(
exiftool-DateTimeOriginal file.jpg
)获取
DateTimeOriginal
标记的正确命令。但是你说你得到的是一个目录中的文件名列表,听起来你传递的是一个目录名,而不是文件名。如果您希望仅为目录中具有标记值的文件获取
DateTimeOriginal
,请使用
exiftool-If“$DateTimeOriginal”-DateTimeOriginal C:/path/to/dir
。任何没有
DateTimeOriginal
的文件都不会被列出


需要注意的是,windows“Date Take”属性将根据文件类型由各种元数据标记填充。例如,在PNG文件中,Windows将使用
PNG:CreationTime
。在jpg文件中,Windows将依次使用
EXIF:DateTimeOriginal
IPTC:DateCreated+IPTC:TimeCreated
XMP:CreateDate
EXIF:createdatedate
,然后使用
XMP:DateTimeOriginal
标记。

您拥有从文件获取
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
,a然后
XMP:DateTimeOriginal
标记。

关于使用通用软件的问题属于,但您是否考虑过文件中没有该数据的可能性?
。png
图片不存储exif数据。即使在
jpg
文件中,数据也可以删除。您可以查看哪些文件可以通过windows api.@AndrewMorton类似的问题被转移到stackoverflow,因为它们不属于超级用户,这就是我在这里问的原因,也不是专门的“软件”是的,我已经考虑过了,但重点是,批处理文件甚至不是这样工作的,我搜索一个建议来让这个批处理文件正常工作。@npocmaka是的,你说的对,但是,我只需要它来做jpgs。而thx是提示!@npocmaka,PNG文件现在有一个EXIF标准。它存储在
EXIF
辅助块中ee关于使用通用软件的问题属于,但您是否考虑过该文件没有该数据的可能性?
。png
图片不存储exif数据。即使在
jpg
文件中,数据也可以删除。您可以看看哪些可以通过windows api读取exif数据。@AndrewMorton类似的问题也可以回答我转移到stackoverflow,因为它们不属于超级用户,这就是为什么我在这里问,这也不是特别的“软件”。是的,我已经考虑过了,但问题是,批处理文件甚至不是这样工作的,我在寻找一个建议,让这个批处理文件正常工作。@Npcmaka是的,你的权利,但是,我只是