Adobe XMP SDK项目应用

时下随着科技的发展,航拍很是流行,对于繁多图像的建模,大疆智图(DJI Terra)软件算是行业中的佼佼者了。图像数据信息中自带XMP信息,建立模型后,图像就能自动定位显示出来了。可是有时候XMP信息存在于附加中间中,并没有附加在图像的数据信息中,于是我们可以通过Adobe XMP ToolKit开发包将XMP信息写入到文件中去。完整的XMP信息大致是这样的:

<?xpacket begin="?" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
		<rdf:Description rdf:about="DJI Meta Data"
			xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
			xmlns:exif="http://ns.adobe.com/exif/1.0/"
			xmlns:xmp="http://ns.adobe.com/xap/1.0/"
			xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
			xmlns:dc="http://purl.org/dc/elements/1.1/"
			xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/"
			xmlns:drone-dji="http://www.dji.com/drone-dji/1.0/"
			xmp:ModifyDate="2019-12-07"
			xmp:CreateDate="2019-12-07"
			tiff:Make="DJI"
			tiff:Model="FC6310R"
			dc:format="image/jpg"
			drone-dji:AbsoluteAltitude="+521.99"
			drone-dji:RelativeAltitude="+55.02"
			drone-dji:GpsLatitude="30.52604783"
			drone-dji:GpsLongtitude="104.23446548"
			drone-dji:GimbalRollDegree="+0.00"
			drone-dji:GimbalYawDegree="-47.30"
			drone-dji:GimbalPitchDegree="-89.90"
			drone-dji:FlightRollDegree="+2.50"
			drone-dji:FlightYawDegree="-48.00"
			drone-dji:FlightPitchDegree="-4.30"
			drone-dji:FlightXSpeed="+2.60"
			drone-dji:FlightYSpeed="-3.00"
			drone-dji:FlightZSpeed="+0.00"
			drone-dji:CamReverse="0"
			drone-dji:GimbalReverse="0"
			drone-dji:SelfData="Undefined"
			drone-dji:CalibratedFocalLength="3666.666504"
			drone-dji:CalibratedOpticalCenterX="2736.000000"
			drone-dji:CalibratedOpticalCenterY="1824.000000"
			drone-dji:RtkFlag="50"
			drone-dji:RtkStdLon="0.01122"
			drone-dji:RtkStdLat="0.00986"
			drone-dji:RtkStdHgt="0.02336"
			drone-dji:DewarpData=" 2018-12-05;3689.740000000000,3682.860000000000,-9.500000000000,10.800000000000,-0.262097000000,0.109604000000,0.000901229000,0.000162288000,-0.037969600000"
			drone-dji:DewarpFlag="0"
			crs:Version="7.0"
			crs:HasSettings="False"
			crs:HasCrop="False"
			crs:AlreadyApplied="False">
		</rdf:Description>
	</rdf:RDF>
</x:xmpmeta>                                                                                                                                                      
<?xpacket end="w"?>

samples中的ModifyingXMP.cpp的代码已经教会了我们怎么讲XMP信息写入到图像文件中去,在这里我就不重点介绍了。写入以后会发现,图像在中始终加载失败,经过一天时间不断的测试对比发现,是属性值rdf:about=""为空造成的,怎么样修改这个值呢,代码其实非常简单:

meta.SetObjectName("DJI Meta Data");

加上这行代码,图像就能够被软件成功加载了。一天的辛苦工作,只为了寻找这1行代码,个中滋味真是......。这期间有过放弃XMPCore的想法,试图采用IWIC接口来实现XMP信息的读取和写入,虽然也能实现XMP信息的写入(同时也支持IFD等等所有图像的读取和写入,这一点比XMPCore完善太多了),但是结局也是非常糟糕,不能设置rdf:about的属性值,且没有源码,只能中途放弃,重新又回归XMPCore上面来了。

        上面提到IWIC可以很轻易的修改IFD里面的信息,那么XMPCore是否也支持这种功能呢?带着这个问题,我重新阅读XMPCore的代码,发现底层在TIFF_Manager里面已经实现了对图像的各项信息的修改SetTag和读取GetTag,但是在XMPFiles里面并没有将这些接口开放到应用层中开,比较这套接口的核心重点是实现XMP信息的读取和写入。并且如果是修改IFD信息,除了IWIC接口还有GDI+、libExif、Exiv2等等,它们都可以很轻易的实现这些功能。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值