暗号化について質問があります。これも、aux:SerialNumber
名前空間からのシリアル番号の読み取りに関連しています。
ByteArray
var i:int = p.search('<x:xmpmeta xmlns:x="\'dobe:ns:meta/\'');
Canon EOS D1000 の写真から AS3 でファイルを開くと、暗号化されているため、このビットを読み取ることができません。
これが興味深いのは、Photoshop でファイルを開いて保存し、閉じると、XMP データは正しく、アプリで読み取ることができるということです。
私の質問は、AS3 内から XMP データをどのように復号化するかということです。それを行う方法はありますか。それとも別の読み方?
これは私が使用する方法です:
private function getXMP(ba:ByteArray):XML
{
var LP:ByteArray = new ByteArray();
var PACKET:ByteArray = new ByteArray();
var l:int;
ba.readBytes(LP, 2, 2);
//http://www.adobe.com/devnet/xmp.html read part 3: Storage in Files.
//that will explain the -2 -29 and other things you see here.
l = LP.readInt() - 2 -29;
ba.readBytes(PACKET, 33, l);
var p:String = trim(""+PACKET);
var i:int = p.search('<x:xmpmeta xmlns:x="adobe:ns:meta/"');
//Delete all in front of the XMP XML
p = p.substr(i);
//For some reason this left some rubbish in front, so I'll hardcode it out for now
var ar:Array = p.split('<');
var s:String = "";
var q:int;
var j:int = ar.length;
for(q=1;q<j;q++)
{
s += '<'+ar[q];
}
i = s.search('</x:xmpmeta>');
i += ('</x:xmpmeta>').length;
s = s.slice(0,i);
//Delete all behind the XMP XML
//trace(s);
return XML(s);
}