UNPKG

xmp-js

Version:

Read and parse XMP from JPEG

2 lines (1 loc) 2.2 kB
function r(r,e){for(var t=0;t<e.length;t++){var n=e[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(r,n.key,n)}}var e=function(){function e(r){!function(r,e){if(!(r instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.buffer=null,r instanceof ArrayBuffer?this.buffer=r:r instanceof Uint8Array?this.buffer=r.buffer:("string"==typeof r||r instanceof String)&&this.fromDataUri(r)}var t,n,f;return t=e,f=[{key:"dataUriToBuffer",value:function(r){for(var e=atob(r.split(",")[1]),t=e.length,n=new ArrayBuffer(t),f=new Uint8Array(n),a=0;a<t;a++)f[a]=e.charCodeAt(a);return n}},{key:"find",value:function(r){var t;r instanceof ArrayBuffer?t=r:r instanceof Uint8Array?this.buffer=r.buffer:("string"==typeof r||r instanceof String)&&(t=e.dataUriToBuffer(r));var n=new DataView(t);if(65496!==n.getUint16(0,!1))return console.warn("not valid JPEG"),null;for(var f="<x:xmpmeta"[0],a="<x:xmpmeta".length,i=t.byteLength-a,o="x:xmpmeta>"[0],u="x:xmpmeta>".length,c=t.byteLength-u,s=2,l=s+a,g=!1;s<i;){if(String.fromCharCode(n.getUint8(s))===f&&"<x:xmpmeta"==e.stringFromBuffer(n,s,a)){g=!0;break}s++}if(!g)return console.warn("XMP not found"),null;for(;l<c&&(String.fromCharCode(n.getUint8(l))!==o||"x:xmpmeta>"!=e.stringFromBuffer(n,l,u));)l++;return l+=u,e.stringFromBuffer(n,s,l-s)}},{key:"stringFromBuffer",value:function(r,e,t){for(var n="",f=e;f<e+t;f++)n+=String.fromCharCode(r.getUint8(f));return n}},{key:"parse",value:function(r){if(!r)return null;var e={};return["title","description","rights","creator","subject"].forEach((function(t){var n=new RegExp("<dc:".concat(t,">([\\s\\S]*?)</dc:").concat(t,">"),"gim").exec(r);if(n&&0!==n.length){var f=n[1].trim();if(0===f.toLowerCase().indexOf("<rdf:bag>")){for(var a=new RegExp("<rdf:li>([\\s\\S]*?)</rdf:li>","gim"),i=a.exec(f),o=[];i;)o.push(i[1]),i=a.exec(f);e[t]=o}else e[t]=f.replace(/<[^>]*>?/gm,"").trim()}})),e}}],(n=[{key:"fromDataUri",value:function(r){this.buffer=e.dataUriToBuffer(r)}},{key:"find",value:function(){return e.find(this.buffer)}},{key:"parse",value:function(){var r=this.find();return e.parse(r)}}])&&r(t.prototype,n),f&&r(t,f),e}();export default e;