2010-12-17 54 views
1

我正在用Delphi编写一个程序,它应该会获得照片拍摄的照片的日期和时间,然后它会重命名该文件以包含找到的日期和时间。如何获取照片拍摄日期和时间?

到目前为止,我通过打开文件为二进制文件并搜索字节的特殊顺序来实现该目标。这些字节之后是日期,然后是时间。所以我遇到了一个问题。其实很少有问题。

  1. 因为它读取一个字节接一个字节的文件,读取文件是一个缓慢的过程。如果找到日期,它通常在文件的开头,不需要很长时间,但是如果没有找到“特殊字节顺序”,它将读取整个文件。所以我的方法太慢了。

  2. 即使是用同一个相机拍摄的,某些图片中的特殊字节顺序可能会改变(我不知道为什么)。所以我的程序有时无法找到文件中的日期,即使它在那里。

Windows资源管理器没有问题,发现在所有的图片日期,所以我想也许有某种特殊的功能,这可以让我我需要什么?

如何从图片中获得所需的信息,以便与所有格式一起使用?

感谢

+2

你readingt文件1字节在距盘时间?为什么不把整个文件读入缓冲区然后在那里处理呢? – Rup 2010-12-17 12:32:35

+0

是的,你为什么不把整个图像读入内存然后处理呢?顺便说一下,在那里有大量的图片格式描述,您只需要找到您想要支持的图片格式的标题,并从文件中读取标题(通常会告诉您日期和时间的位置) 。 – ComputerSaysNo 2010-12-17 12:46:24

+0

关键字:EXIF,IPTC和DPOF可能是 – 2010-12-17 15:23:29

回答

5

我想你只需要看看EXIF信息。 http://en.wikipedia.org/wiki/Exif

有一些开源工具可以实现这一点,但我不知道任何Delphi的具体内容。如果您不怕Java,可以看看这个开源项目的源代码:http://sourceforge.net/projects/jexifviewer/以了解它们如何评估日期字段。
然后您可以优化您的阅读器,只查看相关区域。您可能要记住,Java中的Endianness与Delphi不同。

+1

Jules正确,您需要检查exif标签以获取该信息(仅适用于jpg和tiff!)。不知道什么关于德尔福但在这里你会发现一些C#代码:http://www.codeproject.com/KB/graphics/exifextractor.aspx – 2010-12-17 12:45:47