如何将元数据与DeepZoom SubImage关联?

时间:2009-01-06 00:26:29

标签: c# silverlight deepzoom

我正在尝试根据与每个图像关联的任意数据对DeepZoom子图像进行排序。子图像通过DeepZoom Composer生成的XML文件自动加载。我没有看到将任意数据与DeepZoom子图像相关联的明确方法。

对我来说最明显的解决方案是脆弱的,并且不能很好地扩展。理想情况下,我想将相关数据放在生成的XML文件中,但是我会在下一组生成的图像上丢失该信息。

是否有完善的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

正如您所注意到的,DeepZoomComposer支持您可以在Silverlight MultiScaleImage控件(filtering by tag example)中使用的<Tag></Tag>元素。

当你在DeepZoomComposer中编辑并重新生成时,你也会“丢失”你添加到XML文件的任何信息,但是如果你输入DeepZoomComposer,你也不会丢失它。

为了解决这个问题,我编写了一个名为TagUpdater的小型控制台应用程序 - 基本上是works like this

  1. 您将元数据放入图像:JPG文件格式支持许多不同的字段,但现在让我们使用标题,关键字(标签),描述和评级

  2. 您将图像添加到Microsoft的DeepZoomComposer(不一定要打扰它们,因为您可能希望动态对它们进行排序;并且不要打扰输入任何元数据)和导出正常

  3. 通过控制台调用TagUpdater.exe Metadata.xml(DeepZoomComposer将生成Metadata.xml文件)。

  4. TagUpdater直接从您的图片中提取元数据并更新Metadata.xml(见下文)。它对现有的<Tag>数据具有破坏性,但除此之外,该文件可以像以前一样用于为MultiScaleImage控件中的DeepZoom集合提供元数据信息。

    <Image>
    <FileName>C:\Documents and Settings\xxxxxx\My Documents\Expression\Deep Zoom Composer Projects\Bhutan\source images\page01.jpg</FileName> 
    <x>0</x> 
    <y>0</y> 
    <Width>0.241254523522316</Width> 
    <Height>0.27256162721473</Height> 
    <ZOrder>1</ZOrder> 
    <Tag>Bhutan,Mask</Tag> 
    <Description>Land of the Thunder Dragon</Description> 
    <Title>Bhutan 2008</Title> 
    <Rating>3</Rating> 
    </Image>
    

    您可以继续添加图像/重新生成,因为元数据来自来自图像(而不是DeepZoomComposer标记框)。

    以下是an example - 请注意当您将光标悬停在每张图片上时,右侧的标记和说明是如何更新的,以及基于点击标记过滤的可见图片。

    可以修改

    Kirupa's来源以使用此额外数据......

    string tagString = g.Element("Tag").Value;
    // get new elements as well
    string descriptionString = g.Element("Description").Value;
    string titleString = g.Element("Title").Value; 
    string ratingString = g.Element("Rating").Value; 
    

    希望有一些兴趣 - TagUpdater本身并不是实现这一目标的唯一方法。它非常简单:只需打开Metadata.XML文件,循环遍历<Image>元素即可打开<FileName>,提取元数据,添加其他XML元素并保存XML。使用文件名作为“密钥”,您可以从数据库中获取其他信息(例如,价格或更多描述数据),并根据需要扩展XML文件。

答案 1 :(得分:1)

Metadata.xml具有可与每个图像关联的Tag属性。乌拉!