我正在尝试根据与每个图像关联的任意数据对DeepZoom子图像进行排序。子图像通过DeepZoom Composer生成的XML文件自动加载。我没有看到将任意数据与DeepZoom子图像相关联的明确方法。
对我来说最明显的解决方案是脆弱的,并且不能很好地扩展。理想情况下,我想将相关数据放在生成的XML文件中,但是我会在下一组生成的图像上丢失该信息。
是否有完善的方法来实现这一目标?
答案 0 :(得分:2)
正如您所注意到的,DeepZoomComposer支持您可以在Silverlight MultiScaleImage控件(filtering by tag example)中使用的<Tag></Tag>
元素。
当你在DeepZoomComposer中编辑并重新生成时,你也会“丢失”你添加到XML文件的任何信息,但是如果你输入DeepZoomComposer,你也不会丢失它。
为了解决这个问题,我编写了一个名为TagUpdater的小型控制台应用程序 - 基本上是works like this:
您将元数据放入图像: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标记框)。
以下是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属性。乌拉!