0

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

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

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

4

2 回答 2

2

正如您所注意到的,DeepZoomComposer 支持<Tag></Tag>您可以在 Silverlight MultiScaleImage 控件中使用的元素(按标签过滤示例)。

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

为了解决这个问题,我编写了一个名为TagUpdater的小控制台应用程序——它基本上是这样工作的

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

  2. 您将图像添加到 Microsoft 的 DeepZoomComposer(不必费心布置它们,因为您可能想要动态地对它们进行排序;并且不必费心输入任何元数据)并正常导出

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

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 标签框)。

这是一个示例- 请注意,当您将鼠标悬停在每个图像上时,右侧的标签和描述如何更新,以及基于单击标签过滤的可见图像。

可以修改 Kirupa 的源代码以使用这些额外的数据...

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 文件。

于 2009-03-20T07:29:01.630 回答
1

Metadata.xml 有一个可以与每个图像关联的 Tag 属性。欢呼!

于 2009-01-24T21:56:19.693 回答