Read Image XMP Metadata
hi all,
hope i'm not spamming thread mailbox felt question asked in unrelated forum.
question: can read image meta data flex ?
i tried xmp core library , passed jpeg file xmpmeta object :
private function getimagemetadata(jpeg:file):void { var meta:xmpmeta = new xmpmeta(jpeg); var packet:xml = meta.serializetoxml(); var photoshop:namespace = xmpconst.photoshop; var value:string = meta.photoshop::authorsposition; trace(value); // returns null, not sure why }
can 1 me image metadata.
thanks in advance
mac
i've got content related issue net still won't solve problem
private function init():void {
var ldr:loader = new loader();
ldr.contentloaderinfo.addeventlistener(event.complete, imgloaded);
var s:string = "my/jpgpath/myjpgname.jpg";
ldr.load(new urlrequest(s));
}
private function imgloaded(e:event):void{
var info:loaderinfo = e.target as loaderinfo;
var xmpxml:xml = getxmp(info.bytes);
//trace(xmpxml);
var meta:xmpmeta = new xmpmeta(xmpxml);
//var packet:xml = meta.serializetoxml();
var photoshop:namespace = xmpconst.photoshop
trace(meta.photoshop::authorsposition);
}
private function trim(s:string):string{
return s.replace( /^([\s|\t|\n]+)?(.*)([\s|\t|\n]+)?$/gm, "$2" );
}
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 explain -2 -29 , other things see here.
*/
l = lp.readint() - 2 -29;
ba.readbytes(packet, 33, l);
var p:string = trim(encode(packet) as string);
var i:int = p.search('<x:xmpmeta xmlns:x="adobe:ns:meta/"');
/* delete in front of xmp xml */
p = p.substr(i);
/*
for reason left rubbish in front, i'll hardcode out
todo clean up
*/
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 behind xmp xml */
return xml(s);
}
private static function encode(ba:bytearray):string {
var origpos:uint = ba.position;
var result:array = new array();
for (ba.position = 0; ba.position < ba.length - 1; )
result.push(ba.readshort());
if (ba.position != ba.length)
result.push(ba.readbyte() << 8);
ba.position = origpos;
return string.fromcharcode.apply(null, result);
}
it seems there bug in xmpmeta class throws exception "the xmpmeta object cannot have qualifiers", created default (no param).
does have clue on this? please help
thanks
mac
More discussions in Flex (Read Only)
adobe
Comments
Post a Comment