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

Popular posts from this blog

How to change text Component easybook reloaded *newbee* - Joomla! Forum - community, help and support

After Effect warning: A problem occurred when processing OpenGL commands

Preconditions Failed. - Joomla! Forum - community, help and support