跳转至

如何使用 IDL 读取 TIFF/JPEG/DNG 文件中的 XML 元数据

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/how-to-read-xml-metadata-from-a-tiffjpegdng-file-with-idl

18381 对此文章评分:

4.4

如何使用 IDL 读取 TIFF/JPEG/DNG 文件中的 XML 元数据

Anonym 星期四, 2016年5月26日

这是一个展示如何从 DNG 文件内部的 XML 数据包中提取各种图像元数据的示例。使用 XML 数据包存储元数据在无人机 (UAV) 捕获的图像数据中尤其流行。XML 数据包并非原始 DNG 图像格式所特有,也可能出现在 JPEG 和 TIFF 图像文件中。下面的代码示例将适用于包含 XML 数据包的 JPEG、TIFF 以及 DNG 文件。在此示例中,我使用对象类和静态方法来实现解析代码。如果你有多个希望包含在同一个 .pro 文件中的函数,但仍希望可以方便地从命令行调用,这种方法会很好。其他方法可以添加到这个解析器中,使其更容易读取图像元数据。以下是我的“dng__define.pro”源文件的内容:

; 从 DNG 文件中提取 XML 元数据 ; function dng::XmlMetadata, filename compile_opt idl2,logical_predicate,static info = OrderedHash() exif = read_exif(filename) xml = IDLffXmlDomDocument() xml->Load, STRING=string(exif['Exif_Image_XMLPacket']) iter = xml->CreateNodeIterator(obj_new(), what_to_show=5) node = iter->NextNode() while obj_valid(node) do begin if isa(node,'IDLffXmlDomText') then begin key = (node->GetParentNode())->GetTagName() info[key] = node->GetData() endif node = iter->NextNode() endwhile return, info end**

; 类定义 pro dng__define s = { dng, inherits IDL_Object } end

我在一个随机样本 DNG 文件上测试了这段代码,该文件我在这里找到:
http://www.phantompilots.com/threads/hands-on-experience-phantom-3-4k-plus-inside-the-hood-pictures.38694/ 但是,这个代码示例并不特定于此文件。它展示了如何解析嵌入在 TIFF、JPEG 或 DNG 文件中的任何 XML 数据包。
列表相当冗长,因此我只包括前几行来展示如何调用代码:

IDL> dng.XmlMetadata(filename) { "x:xmpmeta": "\n", "rdf:RDF": "\n\n", "rdf:Description": "\n ", "crs:Version": "3.7", "crs:RawFileName": "L1004220.DNG", "crs:WhiteBalance": "As Shot", "crs:Temperature": "6700", "crs:Tint": "+27", "crs:Exposure": "+0.20", "crs:Shadows": "0", "crs:Brightness": "+50", "crs:Contrast": "+32", ... }

社区数据丰富 当月影像 – 麦克默里堡大火持续肆虐