summit/frontend/node_modules/@monogrid/gainmap-js/dist/libultrahdr.min.js

6 lines
6.4 KiB
JavaScript
Raw Normal View History

2025-12-08 16:31:30 +00:00
/**
* @monogrid/gainmap-js v3.4.0
* With , by MONOGRID <gainmap@monogrid.com>
*/
const t=216,e=225,n=226,a=218,r={SIGNATURE:new Uint8Array([77,80,70,0]),BIG_ENDIAN:new Uint8Array([77,77]),TIFF_MAGIC:42,NUM_PICTURES:2,TAG_COUNT:3,TAG_SIZE:12,MP_ENTRY_SIZE:16},s=45056,i=45057,p=45058,o=7,h=4,g=0,m=536870912,c=new Uint8Array([48,49,48,48]);function d(){return r.SIGNATURE.length+2+2+4+2+r.TAG_COUNT*r.TAG_SIZE+4+r.NUM_PICTURES*r.MP_ENTRY_SIZE}const u="Primary",f="GainMap",M="image/jpeg";function l(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function U(t,e,n,a){const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(r.setUint8(e++,255),r.setUint8(e++,n),a&&a.length>0){const n=a.length+2;r.setUint16(e,n,!1),e+=2,t.set(a,e),e+=a.length}return e}function x(x){const{sdr:y,gainMap:w,metadata:T,exif:I,icc:A}=x;if("image/jpeg"!==y.mimeType)throw new Error("SDR image must be JPEG format");if("image/jpeg"!==w.mimeType)throw new Error("Gain map image must be JPEG format");const E=function(n){const r=new DataView(n.buffer,n.byteOffset,n.byteLength);if(255!==r.getUint8(0)||r.getUint8(1)!==t)return null;let s=2;const i="Exif\0\0";for(;s<n.length-1&&255===r.getUint8(s);){const t=r.getUint8(s+1);if(t===a)break;if(t===e){const t=r.getUint16(s+2,!1),e=s+4;let a=!0;for(let t=0;t<6;t++)if(e+t>=n.length||n[e+t]!==i.charCodeAt(t)){a=!1;break}if(a){const a=t-2;return{data:n.slice(e,e+a),pos:s,size:t+2}}}s+=2+r.getUint16(s+2,!1)}return null}(y.data);if(E&&I)throw new Error("Primary image already contains EXIF data, cannot add external EXIF");let C=y.data,S=I;E&&(C=function(t,e,n){const a=t.length-n,r=new Uint8Array(a);return r.set(t.subarray(0,e),0),r.set(t.subarray(e+n),e),r}(y.data,E.pos,E.size),S=E.data);const R=function(t){const e=[],n=t.hdrCapacityMin,a=t.hdrCapacityMax,r=t=>Array.isArray(t)?t.reduce((t,e)=>t+e,0)/t.length:t,s=r(t.gainMapMin),i=r(t.gainMapMax),p=r(t.gamma),o=r(t.offsetSdr),h=r(t.offsetHdr);return e.push('<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>'),e.push('<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">'),e.push(' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'),e.push(" <rdf:Description"),e.push(' xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"'),e.push(` hdrgm:Version="${l(t.version)}"`),e.push(` hdrgm:GainMapMin="${l(s)}"`),e.push(` hdrgm:GainMapMax="${l(i)}"`),e.push(` hdrgm:Gamma="${l(p)}"`),e.push(` hdrgm:OffsetSDR="${l(o)}"`),e.push(` hdrgm:OffsetHDR="${l(h)}"`),e.push(` hdrgm:HDRCapacityMin="${l(n)}"`),e.push(` hdrgm:HDRCapacityMax="${l(a)}"`),e.push(' hdrgm:BaseRenditionIsHDR="False"'),e.push(' rdf:about=""/>'),e.push(" </rdf:RDF>"),e.push("</x:xmpmeta>"),e.push('<?xpacket end="w"?>'),e.join("\n")}(T),b=(new TextEncoder).encode(R),G=(new TextEncoder).encode("http://ns.adobe.com/xap/1.0/\0"),D=6+G.length+b.length+(w.data.length-2),N=function(t,e){const n=[];return n.push('<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>'),n.push('<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">'),n.push(' <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'),n.push(" <rdf:Description"),n.push(' xmlns:Container="http://ns.google.com/photos/1.0/container/"'),n.push(' xmlns:Item="http://ns.google.com/photos/1.0/container/item/"'),n.push(' xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"'),n.push(` hdrgm:Version="${l(e.version)}"`),n.push(' rdf:about="">'),n.push(" <Container:Directory>"),n.push(" <rdf:Seq>"),n.push(' <rdf:li rdf:parseType="Resource">'),n.push(" <Container:Item"),n.push(` Item:Semantic="${u}"`),n.push(` Item:Mime="${M}"/>`),n.push(" </rdf:li>"),n.push(' <rdf:li rdf:parseType="Resource">'),n.push(" <Container:Item"),n.push(` Item:Semantic="${f}"`),n.push(` Item:Mime="${M}"`),n.push(` Item:Length="${t}"/>`),n.push(" </rdf:li>"),n.push(" </rdf:Seq>"),n.push(" </Container:Directory>"),n.push(" </