Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问';标签';使用c的图像的元数据字段#_C#_Image Processing_Tags_Metadata - Fatal编程技术网

C# 访问';标签';使用c的图像的元数据字段#

C# 访问';标签';使用c的图像的元数据字段#,c#,image-processing,tags,metadata,C#,Image Processing,Tags,Metadata,我正在对图片进行排序。最初,我创建了一个数据集来存储图像元数据。当我必须提取图像的元数据时,我遇到了一个问题。我能够提取除“标签”字段之外的所有元数据,我需要对图像进行排序 我附加到类似的职位,但它是在matlab的链接。 我只需要用红色圈起来的信息。用模因的方式简单地说:“一个人不能简单地提取标签元数据”,显然 据我所知,在浏览器中,在JPG的属性页上设置的标记元数据相对容易获取。 它们位于属性项中,ID为9C9E(或40094十进制)。 此PropertyItem的值是一个带有Unicod

我正在对图片进行排序。最初,我创建了一个数据集来存储图像元数据。当我必须提取图像的元数据时,我遇到了一个问题。我能够提取除“标签”字段之外的所有元数据,我需要对图像进行排序

我附加到类似的职位,但它是在matlab的链接。


我只需要用红色圈起来的信息。

用模因的方式简单地说:“一个人不能简单地提取标签元数据”,显然

据我所知,在浏览器中,在JPG的属性页上设置的标记元数据相对容易获取。
它们位于
属性项
中,ID为
9C9E
(或
40094
十进制)。
PropertyItem
的值是一个带有Unicode字符的
字节[]
,以null结尾

下面是提取标记的方法(
分离,因此您可以调整该方法以返回拆分的标记列表)

有了它,您应该会得到

塔贡;标签二:

不过,您可能已经注意到,我谈论的是基本的标记信息和在Windows资源管理器中设置的标记。它们很容易得到。
如果您选择在或上运行上述代码,则不会返回任何数据。这是因为所有不同的工具和硬件可以用大量不同的方式将元数据存储在jpeg中。
如果你想知道有多少不同类型的元数据和标签的所有不同名称及其格式,请转到,在该页面上探索一下,尤其是“标签名称”页面,你肯定会对不同标签的数量感到头疼

现在,您可能想知道,您是否应该更深入地研究元数据标记提取的世界,或者是否可以为该工具制作一个包装器,将其集成到C#(显然有些人已经这样做了,但需要工具存在以及其他一些东西,请在工具页面的部分下查看信息)

啊,但不要害怕!因为有人想出了一种更简单的方法,用C#来提取正确的信息,这样您就可以单独使用元数据标记了。
我发现这一点时,我试图把我的头围绕着巨大的是exif元数据。这个小库使您能够轻松地提取元数据标记,并处理到目前为止我链接的所有示例。
如果您使用的是VisualStudio,则可以使用NuGet将其安装到项目中

调用库时得到的
列表
分别为您提供每个标记

作为示例,图像(example027.jpg)和(GettyVilla0001.jpg)使用所示代码生成以下列表:

  JpegMetadataAdapter metaAdapter = new JpegMetadataAdapter(@"C:\Dev\example027.JPG");

  foreach (string item in metaAdapter.Metadata.Keywords)
  {
    outputString += string.Format("{0}{1}", item, Environment.NewLine);
  }
中世纪的
意大利语
绘画(视觉作品)
壁画(绘画)
壁画(技法)
寓言的
建筑内部
周期或系列
新约
旧约和伪经
圣人
耶稣基督
圣母玛利亚,圣母玛利亚

基督教肖像学
激情
加略人犹大
弟子

日落
阴影
壁画
花柱(柱廊)
trompe-l'oeil
希腊语
罗马语
盖蒂别墅酒店


这两种图像存储元数据标记的方式都不同,因此可以公平地说,使用该库,您应该被JPEG格式的大多数元数据标记版本所覆盖。

您是如何提取元数据的?向我们展示这段代码,我们可能会更容易地提供帮助。我遵循了这段代码。如果您不想使用自定义库,此链接提供了查看所有元数据的好方法:
  JpegMetadataAdapter metaAdapter = new JpegMetadataAdapter(@"C:\Dev\example027.JPG");

  foreach (string item in metaAdapter.Metadata.Keywords)
  {
    outputString += string.Format("{0}{1}", item, Environment.NewLine);
  }
  JpegMetadataAdapter metaAdapter = new JpegMetadataAdapter(@"C:\Dev\GettyVilla0001.JPG");

  foreach (string item in metaAdapter.Metadata.Keywords)
  {
    outputString += string.Format("{0}{1}", item, Environment.NewLine);
  }