<surface>
<graphic url="Z:\home\ashutosh\Desktop\imgdone\0015 Dalai Lama\0001.jpeg" width="208px" height="242px"/>
<zone xml:id="imtArea_0" rendition="_0015" ulx="47" uly="68" lrx="143" lry="172" rend="visible"/>
</surface>
我的目标是加载由图形的url属性给出的图像,并将其作为ulx,uly,lrx和lry给出的坐标进行注释。当我运行上面的代码时,我将图形作为表面的子节点,但我无法知道如何从作为图形属性的url中提取图像。
因此,首先有人可以告诉我如何使用DOM解析从给定的URL加载图像,其次当我的图像显示时,如何使用坐标ulx,uly在图像的表面周围绘制一个边界框.... LRY。
已编辑,我认为这有助于理解问题
请帮助!!
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("0001.xml");
$elements = $xmlDoc->getElementsByTagName('surface');
foreach ($elements as $node)
{
if($node->childNodes->length)
{
foreach($node->childNodes as $child)
{
echo $child->nodeName,',';
echo $child->nodeName,','->nodeValue;
}
}
}
?>
答案 0 :(得分:0)
使用Xpath表达式从XML中获取数据很简单。
$xml = <<<'XML'
<surface>
<graphic url="Z:\home\ashutosh\Desktop\imgdone\0015 Dalai Lama\0001.jpeg" width="208px" height="242px"/>
<zone xml:id="imtArea_0" rendition="_0015" ulx="47" uly="68" lrx="143" lry="172" rend="visible"/>
</surface>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('//surface') as $surface) {
var_dump(
[
'url' => $xpath->evaluate('string(graphic/@url)', $surface),
'ulx' => $xpath->evaluate('number(zone/@ulx)', $surface),
'uly' => $xpath->evaluate('number(zone/@uly)', $surface),
'lrx' => $xpath->evaluate('number(zone/@lrx)', $surface),
'lry' => $xpath->evaluate('number(zone/@lry)', $surface),
]
);
}
输出:
array(5) {
["url"]=>
string(64) "Z:\home\ashutosh\Desktop\imgdone\0015 Dalai Lama\0001.jpeg"
["ulx"]=>
float(47)
["uly"]=>
float(68)
["lrx"]=>
float(143)
["lry"]=>
float(172)
}
您如何使用数据取决于预期结果。您可以使用图像功能生成带有矩形的图像。另一种可能性是生成具有数据属性的img
标记,并使用JavaScript(在浏览器中)将该矩形生成为div
。这将允许轻松的互动。