我正在尝试根据与每个图像关联的任意数据对一组 DeepZoom 子图像进行排序。子图像通过 DeepZoom Composer 生成的 XML 文件自动加载。我没有看到将任意数据与 DeepZoom 子图像相关联的明确方法。
对我来说似乎最明显的解决方案很脆弱,而且不能很好地扩展。理想情况下,我想将相关数据放在生成的 XML 文件中,但在下一组生成的图像中我会丢失该信息。
是否有完善的方法来实现这一目标?
我正在尝试根据与每个图像关联的任意数据对一组 DeepZoom 子图像进行排序。子图像通过 DeepZoom Composer 生成的 XML 文件自动加载。我没有看到将任意数据与 DeepZoom 子图像相关联的明确方法。
对我来说似乎最明显的解决方案很脆弱,而且不能很好地扩展。理想情况下,我想将相关数据放在生成的 XML 文件中,但在下一组生成的图像中我会丢失该信息。
是否有完善的方法来实现这一目标?
正如您所注意到的,DeepZoomComposer 支持<Tag></Tag>
您可以在 Silverlight MultiScaleImage 控件中使用的元素(按标签过滤示例)。
当您在 DeepZoomComposer 中编辑并重新生成时,您将“丢失”添加到 XML 文件中的任何信息也是正确的(但是,如果您在 DeepZoomComposer 中键入,您不会丢失它)。
为了解决这个问题,我编写了一个名为TagUpdater的小控制台应用程序——它基本上是这样工作的:
您将元数据放入图像中:JPG 文件格式支持许多不同的字段,但现在让我们使用标题、关键字(标签)、描述和评级
您将图像添加到 Microsoft 的 DeepZoomComposer(不必费心布置它们,因为您可能想要动态地对它们进行排序;并且不必费心输入任何元数据)并正常导出
通过控制台调用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 标签框)。
这是一个示例- 请注意,当您将鼠标悬停在每个图像上时,右侧的标签和描述如何更新,以及基于单击标签过滤的可见图像。
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 文件。
Metadata.xml 有一个可以与每个图像关联的 Tag 属性。欢呼!