artabro/wire/modules/Inputfield/InputfieldImage/piexif.min.js
2024-08-27 11:35:37 +02:00

1 line
No EOL
38 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(){"use strict";var that={};that.version="1.0.4";that.remove=function(jpeg){var b64=false;if(jpeg.slice(0,2)=="ÿØ"){}else if(jpeg.slice(0,23)=="data:image/jpeg;base64,"||jpeg.slice(0,22)=="data:image/jpg;base64,"){jpeg=atob(jpeg.split(",")[1]);b64=true}else{throw new Error("Given data is not jpeg.")}var segments=splitIntoSegments(jpeg);var newSegments=segments.filter(function(seg){return!(seg.slice(0,2)=="ÿá"&&seg.slice(4,10)=="Exif\0\0")});var new_data=newSegments.join("");if(b64){new_data="data:image/jpeg;base64,"+btoa(new_data)}return new_data};that.insert=function(exif,jpeg){var b64=false;if(exif.slice(0,6)!="Exif\0\0"){throw new Error("Given data is not exif.")}if(jpeg.slice(0,2)=="ÿØ"){}else if(jpeg.slice(0,23)=="data:image/jpeg;base64,"||jpeg.slice(0,22)=="data:image/jpg;base64,"){jpeg=atob(jpeg.split(",")[1]);b64=true}else{throw new Error("Given data is not jpeg.")}var exifStr="ÿá"+pack(">H",[exif.length+2])+exif;var segments=splitIntoSegments(jpeg);var new_data=mergeSegments(segments,exifStr);if(b64){new_data="data:image/jpeg;base64,"+btoa(new_data)}return new_data};that.load=function(data){var input_data;if(typeof data=="string"){if(data.slice(0,2)=="ÿØ"){input_data=data}else if(data.slice(0,23)=="data:image/jpeg;base64,"||data.slice(0,22)=="data:image/jpg;base64,"){input_data=atob(data.split(",")[1])}else if(data.slice(0,4)=="Exif"){input_data=data.slice(6)}else{throw new Error("'load' gots invalid file data.")}}else{throw new Error("'load' gots invalid type argument.")}var exifDict={};var exif_dict={"0th":{},Exif:{},GPS:{},Interop:{},"1st":{},thumbnail:null};var exifReader=new ExifReader(input_data);if(exifReader.tiftag===null){return exif_dict}if(exifReader.tiftag.slice(0,2)=="II"){exifReader.endian_mark="<"}else{exifReader.endian_mark=">"}var pointer=unpack(exifReader.endian_mark+"L",exifReader.tiftag.slice(4,8))[0];exif_dict["0th"]=exifReader.get_ifd(pointer,"0th");var first_ifd_pointer=exif_dict["0th"]["first_ifd_pointer"];delete exif_dict["0th"]["first_ifd_pointer"];if(34665 in exif_dict["0th"]){pointer=exif_dict["0th"][34665];exif_dict["Exif"]=exifReader.get_ifd(pointer,"Exif")}if(34853 in exif_dict["0th"]){pointer=exif_dict["0th"][34853];exif_dict["GPS"]=exifReader.get_ifd(pointer,"GPS")}if(40965 in exif_dict["Exif"]){pointer=exif_dict["Exif"][40965];exif_dict["Interop"]=exifReader.get_ifd(pointer,"Interop")}if(first_ifd_pointer!="\0\0\0\0"){pointer=unpack(exifReader.endian_mark+"L",first_ifd_pointer)[0];exif_dict["1st"]=exifReader.get_ifd(pointer,"1st");if(513 in exif_dict["1st"]&&514 in exif_dict["1st"]){var end=exif_dict["1st"][513]+exif_dict["1st"][514];var thumb=exifReader.tiftag.slice(exif_dict["1st"][513],end);exif_dict["thumbnail"]=thumb}}return exif_dict};that.dump=function(exif_dict_original){var TIFF_HEADER_LENGTH=8;var exif_dict=copy(exif_dict_original);var header="Exif\0\0MM\0*\0\0\0\b";var exif_is=false;var gps_is=false;var interop_is=false;var first_is=false;var zeroth_ifd,exif_ifd,interop_ifd,gps_ifd,first_ifd;if("0th"in exif_dict){zeroth_ifd=exif_dict["0th"]}else{zeroth_ifd={}}if("Exif"in exif_dict&&Object.keys(exif_dict["Exif"]).length||"Interop"in exif_dict&&Object.keys(exif_dict["Interop"]).length){zeroth_ifd[34665]=1;exif_is=true;exif_ifd=exif_dict["Exif"];if("Interop"in exif_dict&&Object.keys(exif_dict["Interop"]).length){exif_ifd[40965]=1;interop_is=true;interop_ifd=exif_dict["Interop"]}else if(Object.keys(exif_ifd).indexOf(that.ExifIFD.InteroperabilityTag.toString())>-1){delete exif_ifd[40965]}}else if(Object.keys(zeroth_ifd).indexOf(that.ImageIFD.ExifTag.toString())>-1){delete zeroth_ifd[34665]}if("GPS"in exif_dict&&Object.keys(exif_dict["GPS"]).length){zeroth_ifd[that.ImageIFD.GPSTag]=1;gps_is=true;gps_ifd=exif_dict["GPS"]}else if(Object.keys(zeroth_ifd).indexOf(that.ImageIFD.GPSTag.toString())>-1){delete zeroth_ifd[that.ImageIFD.GPSTag]}if("1st"in exif_dict&&"thumbnail"in exif_dict&&exif_dict["thumbnail"]!=null){first_is=true;exif_dict["1st"][513]=1;exif_dict["1st"][514]=1;first_ifd=exif_dict["1st"]}var zeroth_set=_dict_to_bytes(zeroth_ifd,"0th",0);var zeroth_length=zeroth_set[0].length+exif_is*12+gps_is*12+4+zeroth_set[1].length;var exif_set,exif_bytes="",exif_length=0,gps_set,gps_bytes="",gps_length=0,interop_set,interop_bytes="",interop_length=0,first_set,first_bytes="",thumbnail;if(exif_is){exif_set=_dict_to_bytes(exif_ifd,"Exif",zeroth_length);exif_length=exif_set[0].length+interop_is*12+exif_set[1].length}if(gps_is){gps_set=_dict_to_bytes(gps_ifd,"GPS",zeroth_length+exif_length);gps_bytes=gps_set.join("");gps_length=gps_bytes.length}if(interop_is){var offset=zeroth_length+exif_length+gps_length;interop_set=_dict_to_bytes(interop_ifd,"Interop",offset);interop_bytes=interop_set.join("");interop_length=interop_bytes.length}if(first_is){var offset=zeroth_length+exif_length+gps_length+interop_length;first_set=_dict_to_bytes(first_ifd,"1st",offset);thumbnail=_get_thumbnail(exif_dict["thumbnail"]);if(thumbnail.length>64e3){throw new Error("Given thumbnail is too large. max 64kB")}}var exif_pointer="",gps_pointer="",interop_pointer="",first_ifd_pointer="\0\0\0\0";if(exif_is){var pointer_value=TIFF_HEADER_LENGTH+zeroth_length;var pointer_str=pack(">L",[pointer_value]);var key=34665;var key_str=pack(">H",[key]);var type_str=pack(">H",[TYPES["Long"]]);var length_str=pack(">L",[1]);exif_pointer=key_str+type_str+length_str+pointer_str}if(gps_is){var pointer_value=TIFF_HEADER_LENGTH+zeroth_length+exif_length;var pointer_str=pack(">L",[pointer_value]);var key=34853;var key_str=pack(">H",[key]);var type_str=pack(">H",[TYPES["Long"]]);var length_str=pack(">L",[1]);gps_pointer=key_str+type_str+length_str+pointer_str}if(interop_is){var pointer_value=TIFF_HEADER_LENGTH+zeroth_length+exif_length+gps_length;var pointer_str=pack(">L",[pointer_value]);var key=40965;var key_str=pack(">H",[key]);var type_str=pack(">H",[TYPES["Long"]]);var length_str=pack(">L",[1]);interop_pointer=key_str+type_str+length_str+pointer_str}if(first_is){var pointer_value=TIFF_HEADER_LENGTH+zeroth_length+exif_length+gps_length+interop_length;first_ifd_pointer=pack(">L",[pointer_value]);var thumbnail_pointer=pointer_value+first_set[0].length+24+4+first_set[1].length;var thumbnail_p_bytes="\0\0\0\0"+pack(">L",[thumbnail_pointer]);var thumbnail_length_bytes="\0\0\0\0"+pack(">L",[thumbnail.length]);first_bytes=first_set[0]+thumbnail_p_bytes+thumbnail_length_bytes+"\0\0\0\0"+first_set[1]+thumbnail}var zeroth_bytes=zeroth_set[0]+exif_pointer+gps_pointer+first_ifd_pointer+zeroth_set[1];if(exif_is){exif_bytes=exif_set[0]+interop_pointer+exif_set[1]}return header+zeroth_bytes+exif_bytes+gps_bytes+interop_bytes+first_bytes};function copy(obj){return JSON.parse(JSON.stringify(obj))}function _get_thumbnail(jpeg){var segments=splitIntoSegments(jpeg);while("ÿà"<=segments[1].slice(0,2)&&segments[1].slice(0,2)<="ÿï"){segments=[segments[0]].concat(segments.slice(2))}return segments.join("")}function _pack_byte(array){return pack(">"+nStr("B",array.length),array)}function _pack_short(array){return pack(">"+nStr("H",array.length),array)}function _pack_long(array){return pack(">"+nStr("L",array.length),array)}function _value_to_bytes(raw_value,value_type,offset){var four_bytes_over="";var value_str="";var length,new_value,num,den;if(value_type=="Byte"){length=raw_value.length;if(length<=4){value_str=_pack_byte(raw_value)+nStr("\0",4-length)}else{value_str=pack(">L",[offset]);four_bytes_over=_pack_byte(raw_value)}}else if(value_type=="Short"){length=raw_value.length;if(length<=2){value_str=_pack_short(raw_value)+nStr("\0\0",2-length)}else{value_str=pack(">L",[offset]);four_bytes_over=_pack_short(raw_value)}}else if(value_type=="Long"){length=raw_value.length;if(length<=1){value_str=_pack_long(raw_value)}else{value_str=pack(">L",[offset]);four_bytes_over=_pack_long(raw_value)}}else if(value_type=="Ascii"){new_value=raw_value+"\0";length=new_value.length;if(length>4){value_str=pack(">L",[offset]);four_bytes_over=new_value}else{value_str=new_value+nStr("\0",4-length)}}else if(value_type=="Rational"){if(typeof raw_value[0]=="number"){length=1;num=raw_value[0];den=raw_value[1];new_value=pack(">L",[num])+pack(">L",[den])}else{length=raw_value.length;new_value="";for(var n=0;n<length;n++){num=raw_value[n][0];den=raw_value[n][1];new_value+=pack(">L",[num])+pack(">L",[den])}}value_str=pack(">L",[offset]);four_bytes_over=new_value}else if(value_type=="SRational"){if(typeof raw_value[0]=="number"){length=1;num=raw_value[0];den=raw_value[1];new_value=pack(">l",[num])+pack(">l",[den])}else{length=raw_value.length;new_value="";for(var n=0;n<length;n++){num=raw_value[n][0];den=raw_value[n][1];new_value+=pack(">l",[num])+pack(">l",[den])}}value_str=pack(">L",[offset]);four_bytes_over=new_value}else if(value_type=="Undefined"){length=raw_value.length;if(length>4){value_str=pack(">L",[offset]);four_bytes_over=raw_value}else{value_str=raw_value+nStr("\0",4-length)}}var length_str=pack(">L",[length]);return[length_str,value_str,four_bytes_over]}function _dict_to_bytes(ifd_dict,ifd,ifd_offset){var TIFF_HEADER_LENGTH=8;var tag_count=Object.keys(ifd_dict).length;var entry_header=pack(">H",[tag_count]);var entries_length;if(["0th","1st"].indexOf(ifd)>-1){entries_length=2+tag_count*12+4}else{entries_length=2+tag_count*12}var entries="";var values="";var key;for(var key in ifd_dict){if(typeof key=="string"){key=parseInt(key)}if(ifd=="0th"&&[34665,34853].indexOf(key)>-1){continue}else if(ifd=="Exif"&&key==40965){continue}else if(ifd=="1st"&&[513,514].indexOf(key)>-1){continue}var raw_value=ifd_dict[key];var key_str=pack(">H",[key]);var value_type=TAGS[ifd][key]["type"];var type_str=pack(">H",[TYPES[value_type]]);if(typeof raw_value=="number"){raw_value=[raw_value]}var offset=TIFF_HEADER_LENGTH+entries_length+ifd_offset+values.length;var b=_value_to_bytes(raw_value,value_type,offset);var length_str=b[0];var value_str=b[1];var four_bytes_over=b[2];entries+=key_str+type_str+length_str+value_str;values+=four_bytes_over}return[entry_header+entries,values]}function ExifReader(data){var segments,app1;if(data.slice(0,2)=="ÿØ"){segments=splitIntoSegments(data);app1=getExifSeg(segments);if(app1){this.tiftag=app1.slice(10)}else{this.tiftag=null}}else if(["II","MM"].indexOf(data.slice(0,2))>-1){this.tiftag=data}else if(data.slice(0,4)=="Exif"){this.tiftag=data.slice(6)}else{throw new Error("Given file is neither JPEG nor TIFF.")}}ExifReader.prototype={get_ifd:function(pointer,ifd_name){var ifd_dict={};var tag_count=unpack(this.endian_mark+"H",this.tiftag.slice(pointer,pointer+2))[0];var offset=pointer+2;var t;if(["0th","1st"].indexOf(ifd_name)>-1){t="Image"}else{t=ifd_name}for(var x=0;x<tag_count;x++){pointer=offset+12*x;var tag=unpack(this.endian_mark+"H",this.tiftag.slice(pointer,pointer+2))[0];var value_type=unpack(this.endian_mark+"H",this.tiftag.slice(pointer+2,pointer+4))[0];var value_num=unpack(this.endian_mark+"L",this.tiftag.slice(pointer+4,pointer+8))[0];var value=this.tiftag.slice(pointer+8,pointer+12);var v_set=[value_type,value_num,value];if(tag in TAGS[t]){ifd_dict[tag]=this.convert_value(v_set)}}if(ifd_name=="0th"){pointer=offset+12*tag_count;ifd_dict["first_ifd_pointer"]=this.tiftag.slice(pointer,pointer+4)}return ifd_dict},convert_value:function(val){var data=null;var t=val[0];var length=val[1];var value=val[2];var pointer;if(t==1){if(length>4){pointer=unpack(this.endian_mark+"L",value)[0];data=unpack(this.endian_mark+nStr("B",length),this.tiftag.slice(pointer,pointer+length))}else{data=unpack(this.endian_mark+nStr("B",length),value.slice(0,length))}}else if(t==2){if(length>4){pointer=unpack(this.endian_mark+"L",value)[0];data=this.tiftag.slice(pointer,pointer+length-1)}else{data=value.slice(0,length-1)}}else if(t==3){if(length>2){pointer=unpack(this.endian_mark+"L",value)[0];data=unpack(this.endian_mark+nStr("H",length),this.tiftag.slice(pointer,pointer+length*2))}else{data=unpack(this.endian_mark+nStr("H",length),value.slice(0,length*2))}}else if(t==4){if(length>1){pointer=unpack(this.endian_mark+"L",value)[0];data=unpack(this.endian_mark+nStr("L",length),this.tiftag.slice(pointer,pointer+length*4))}else{data=unpack(this.endian_mark+nStr("L",length),value)}}else if(t==5){pointer=unpack(this.endian_mark+"L",value)[0];if(length>1){data=[];for(var x=0;x<length;x++){data.push([unpack(this.endian_mark+"L",this.tiftag.slice(pointer+x*8,pointer+4+x*8))[0],unpack(this.endian_mark+"L",this.tiftag.slice(pointer+4+x*8,pointer+8+x*8))[0]])}}else{data=[unpack(this.endian_mark+"L",this.tiftag.slice(pointer,pointer+4))[0],unpack(this.endian_mark+"L",this.tiftag.slice(pointer+4,pointer+8))[0]]}}else if(t==7){if(length>4){pointer=unpack(this.endian_mark+"L",value)[0];data=this.tiftag.slice(pointer,pointer+length)}else{data=value.slice(0,length)}}else if(t==9){if(length>1){pointer=unpack(this.endian_mark+"L",value)[0];data=unpack(this.endian_mark+nStr("l",length),this.tiftag.slice(pointer,pointer+length*4))}else{data=unpack(this.endian_mark+nStr("l",length),value)}}else if(t==10){pointer=unpack(this.endian_mark+"L",value)[0];if(length>1){data=[];for(var x=0;x<length;x++){data.push([unpack(this.endian_mark+"l",this.tiftag.slice(pointer+x*8,pointer+4+x*8))[0],unpack(this.endian_mark+"l",this.tiftag.slice(pointer+4+x*8,pointer+8+x*8))[0]])}}else{data=[unpack(this.endian_mark+"l",this.tiftag.slice(pointer,pointer+4))[0],unpack(this.endian_mark+"l",this.tiftag.slice(pointer+4,pointer+8))[0]]}}else{throw new Error("Exif might be wrong. Got incorrect value "+"type to decode. type:"+t)}if(data instanceof Array&&data.length==1){return data[0]}else{return data}}};if(typeof window!=="undefined"&&typeof window.btoa==="function"){var btoa=window.btoa}if(typeof btoa==="undefined"){var btoa=function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}return output}}if(typeof window!=="undefined"&&typeof window.atob==="function"){var atob=window.atob}if(typeof atob==="undefined"){var atob=function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}}function getImageSize(imageArray){var segments=slice2Segments(imageArray);var seg,width,height,SOF=[192,193,194,195,197,198,199,201,202,203,205,206,207];for(var x=0;x<segments.length;x++){seg=segments[x];if(SOF.indexOf(seg[1])>=0){height=seg[5]*256+seg[6];width=seg[7]*256+seg[8];break}}return[width,height]}function pack(mark,array){if(!(array instanceof Array)){throw new Error("'pack' error. Got invalid type argument.")}if(mark.length-1!=array.length){throw new Error("'pack' error. "+(mark.length-1)+" marks, "+array.length+" elements.")}var littleEndian;if(mark[0]=="<"){littleEndian=true}else if(mark[0]==">"){littleEndian=false}else{throw new Error("")}var packed="";var p=1;var val=null;var c=null;var valStr=null;while(c=mark[p]){if(c.toLowerCase()=="b"){val=array[p-1];if(c=="b"&&val<0){val+=256}if(val>255||val<0){throw new Error("'pack' error.")}else{valStr=String.fromCharCode(val)}}else if(c=="H"){val=array[p-1];if(val>65535||val<0){throw new Error("'pack' error.")}else{valStr=String.fromCharCode(Math.floor(val%65536/256))+String.fromCharCode(val%256);if(littleEndian){valStr=valStr.split("").reverse().join("")}}}else if(c.toLowerCase()=="l"){val=array[p-1];if(c=="l"&&val<0){val+=4294967296}if(val>4294967295||val<0){throw new Error("'pack' error.")}else{valStr=String.fromCharCode(Math.floor(val/16777216))+String.fromCharCode(Math.floor(val%16777216/65536))+String.fromCharCode(Math.floor(val%65536/256))+String.fromCharCode(val%256);if(littleEndian){valStr=valStr.split("").reverse().join("")}}}else{throw new Error("'pack' error.")}packed+=valStr;p+=1}return packed}function unpack(mark,str){if(typeof str!="string"){throw new Error("'unpack' error. Got invalid type argument.")}var l=0;for(var markPointer=1;markPointer<mark.length;markPointer++){if(mark[markPointer].toLowerCase()=="b"){l+=1}else if(mark[markPointer].toLowerCase()=="h"){l+=2}else if(mark[markPointer].toLowerCase()=="l"){l+=4}else{throw new Error("'unpack' error. Got invalid mark.")}}if(l!=str.length){throw new Error("'unpack' error. Mismatch between symbol and string length. "+l+":"+str.length)}var littleEndian;if(mark[0]=="<"){littleEndian=true}else if(mark[0]==">"){littleEndian=false}else{throw new Error("'unpack' error.")}var unpacked=[];var strPointer=0;var p=1;var val=null;var c=null;var length=null;var sliced="";while(c=mark[p]){if(c.toLowerCase()=="b"){length=1;sliced=str.slice(strPointer,strPointer+length);val=sliced.charCodeAt(0);if(c=="b"&&val>=128){val-=256}}else if(c=="H"){length=2;sliced=str.slice(strPointer,strPointer+length);if(littleEndian){sliced=sliced.split("").reverse().join("")}val=sliced.charCodeAt(0)*256+sliced.charCodeAt(1)}else if(c.toLowerCase()=="l"){length=4;sliced=str.slice(strPointer,strPointer+length);if(littleEndian){sliced=sliced.split("").reverse().join("")}val=sliced.charCodeAt(0)*16777216+sliced.charCodeAt(1)*65536+sliced.charCodeAt(2)*256+sliced.charCodeAt(3);if(c=="l"&&val>=2147483648){val-=4294967296}}else{throw new Error("'unpack' error. "+c)}unpacked.push(val);strPointer+=length;p+=1}return unpacked}function nStr(ch,num){var str="";for(var i=0;i<num;i++){str+=ch}return str}function splitIntoSegments(data){if(data.slice(0,2)!="ÿØ"){throw new Error("Given data isn't JPEG.")}var head=2;var segments=["ÿØ"];while(true){if(data.slice(head,head+2)=="ÿÚ"){segments.push(data.slice(head));break}else{var length=unpack(">H",data.slice(head+2,head+4))[0];var endPoint=head+length+2;segments.push(data.slice(head,endPoint));head=endPoint}if(head>=data.length){throw new Error("Wrong JPEG data.")}}return segments}function getExifSeg(segments){var seg;for(var i=0;i<segments.length;i++){seg=segments[i];if(seg.slice(0,2)=="ÿá"&&seg.slice(4,10)=="Exif\0\0"){return seg}}return null}function mergeSegments(segments,exif){var hasExifSegment=false;var additionalAPP1ExifSegments=[];segments.forEach(function(segment,i){if(segment.slice(0,2)=="ÿá"&&segment.slice(4,10)=="Exif\0\0"){if(!hasExifSegment){segments[i]=exif;hasExifSegment=true}else{additionalAPP1ExifSegments.unshift(i)}}});additionalAPP1ExifSegments.forEach(function(segmentIndex){segments.splice(segmentIndex,1)});if(!hasExifSegment&&exif){segments=[segments[0],exif].concat(segments.slice(1))}return segments.join("")}function toHex(str){var hexStr="";for(var i=0;i<str.length;i++){var h=str.charCodeAt(i);var hex=(h<10?"0":"")+h.toString(16);hexStr+=hex+" "}return hexStr}var TYPES={Byte:1,Ascii:2,Short:3,Long:4,Rational:5,Undefined:7,SLong:9,SRational:10};var TAGS={Image:{11:{name:"ProcessingSoftware",type:"Ascii"},254:{name:"NewSubfileType",type:"Long"},255:{name:"SubfileType",type:"Short"},256:{name:"ImageWidth",type:"Long"},257:{name:"ImageLength",type:"Long"},258:{name:"BitsPerSample",type:"Short"},259:{name:"Compression",type:"Short"},262:{name:"PhotometricInterpretation",type:"Short"},263:{name:"Threshholding",type:"Short"},264:{name:"CellWidth",type:"Short"},265:{name:"CellLength",type:"Short"},266:{name:"FillOrder",type:"Short"},269:{name:"DocumentName",type:"Ascii"},270:{name:"ImageDescription",type:"Ascii"},271:{name:"Make",type:"Ascii"},272:{name:"Model",type:"Ascii"},273:{name:"StripOffsets",type:"Long"},274:{name:"Orientation",type:"Short"},277:{name:"SamplesPerPixel",type:"Short"},278:{name:"RowsPerStrip",type:"Long"},279:{name:"StripByteCounts",type:"Long"},282:{name:"XResolution",type:"Rational"},283:{name:"YResolution",type:"Rational"},284:{name:"PlanarConfiguration",type:"Short"},290:{name:"GrayResponseUnit",type:"Short"},291:{name:"GrayResponseCurve",type:"Short"},292:{name:"T4Options",type:"Long"},293:{name:"T6Options",type:"Long"},296:{name:"ResolutionUnit",type:"Short"},301:{name:"TransferFunction",type:"Short"},305:{name:"Software",type:"Ascii"},306:{name:"DateTime",type:"Ascii"},315:{name:"Artist",type:"Ascii"},316:{name:"HostComputer",type:"Ascii"},317:{name:"Predictor",type:"Short"},318:{name:"WhitePoint",type:"Rational"},319:{name:"PrimaryChromaticities",type:"Rational"},320:{name:"ColorMap",type:"Short"},321:{name:"HalftoneHints",type:"Short"},322:{name:"TileWidth",type:"Short"},323:{name:"TileLength",type:"Short"},324:{name:"TileOffsets",type:"Short"},325:{name:"TileByteCounts",type:"Short"},330:{name:"SubIFDs",type:"Long"},332:{name:"InkSet",type:"Short"},333:{name:"InkNames",type:"Ascii"},334:{name:"NumberOfInks",type:"Short"},336:{name:"DotRange",type:"Byte"},337:{name:"TargetPrinter",type:"Ascii"},338:{name:"ExtraSamples",type:"Short"},339:{name:"SampleFormat",type:"Short"},340:{name:"SMinSampleValue",type:"Short"},341:{name:"SMaxSampleValue",type:"Short"},342:{name:"TransferRange",type:"Short"},343:{name:"ClipPath",type:"Byte"},344:{name:"XClipPathUnits",type:"Long"},345:{name:"YClipPathUnits",type:"Long"},346:{name:"Indexed",type:"Short"},347:{name:"JPEGTables",type:"Undefined"},351:{name:"OPIProxy",type:"Short"},512:{name:"JPEGProc",type:"Long"},513:{name:"JPEGInterchangeFormat",type:"Long"},514:{name:"JPEGInterchangeFormatLength",type:"Long"},515:{name:"JPEGRestartInterval",type:"Short"},517:{name:"JPEGLosslessPredictors",type:"Short"},518:{name:"JPEGPointTransforms",type:"Short"},519:{name:"JPEGQTables",type:"Long"},520:{name:"JPEGDCTables",type:"Long"},521:{name:"JPEGACTables",type:"Long"},529:{name:"YCbCrCoefficients",type:"Rational"},530:{name:"YCbCrSubSampling",type:"Short"},531:{name:"YCbCrPositioning",type:"Short"},532:{name:"ReferenceBlackWhite",type:"Rational"},700:{name:"XMLPacket",type:"Byte"},18246:{name:"Rating",type:"Short"},18249:{name:"RatingPercent",type:"Short"},32781:{name:"ImageID",type:"Ascii"},33421:{name:"CFARepeatPatternDim",type:"Short"},33422:{name:"CFAPattern",type:"Byte"},33423:{name:"BatteryLevel",type:"Rational"},33432:{name:"Copyright",type:"Ascii"},33434:{name:"ExposureTime",type:"Rational"},34377:{name:"ImageResources",type:"Byte"},34665:{name:"ExifTag",type:"Long"},34675:{name:"InterColorProfile",type:"Undefined"},34853:{name:"GPSTag",type:"Long"},34857:{name:"Interlace",type:"Short"},34858:{name:"TimeZoneOffset",type:"Long"},34859:{name:"SelfTimerMode",type:"Short"},37387:{name:"FlashEnergy",type:"Rational"},37388:{name:"SpatialFrequencyResponse",type:"Undefined"},37389:{name:"Noise",type:"Undefined"},37390:{name:"FocalPlaneXResolution",type:"Rational"},37391:{name:"FocalPlaneYResolution",type:"Rational"},37392:{name:"FocalPlaneResolutionUnit",type:"Short"},37393:{name:"ImageNumber",type:"Long"},37394:{name:"SecurityClassification",type:"Ascii"},37395:{name:"ImageHistory",type:"Ascii"},37397:{name:"ExposureIndex",type:"Rational"},37398:{name:"TIFFEPStandardID",type:"Byte"},37399:{name:"SensingMethod",type:"Short"},40091:{name:"XPTitle",type:"Byte"},40092:{name:"XPComment",type:"Byte"},40093:{name:"XPAuthor",type:"Byte"},40094:{name:"XPKeywords",type:"Byte"},40095:{name:"XPSubject",type:"Byte"},50341:{name:"PrintImageMatching",type:"Undefined"},50706:{name:"DNGVersion",type:"Byte"},50707:{name:"DNGBackwardVersion",type:"Byte"},50708:{name:"UniqueCameraModel",type:"Ascii"},50709:{name:"LocalizedCameraModel",type:"Byte"},50710:{name:"CFAPlaneColor",type:"Byte"},50711:{name:"CFALayout",type:"Short"},50712:{name:"LinearizationTable",type:"Short"},50713:{name:"BlackLevelRepeatDim",type:"Short"},50714:{name:"BlackLevel",type:"Rational"},50715:{name:"BlackLevelDeltaH",type:"SRational"},50716:{name:"BlackLevelDeltaV",type:"SRational"},50717:{name:"WhiteLevel",type:"Short"},50718:{name:"DefaultScale",type:"Rational"},50719:{name:"DefaultCropOrigin",type:"Short"},50720:{name:"DefaultCropSize",type:"Short"},50721:{name:"ColorMatrix1",type:"SRational"},50722:{name:"ColorMatrix2",type:"SRational"},50723:{name:"CameraCalibration1",type:"SRational"},50724:{name:"CameraCalibration2",type:"SRational"},50725:{name:"ReductionMatrix1",type:"SRational"},50726:{name:"ReductionMatrix2",type:"SRational"},50727:{name:"AnalogBalance",type:"Rational"},50728:{name:"AsShotNeutral",type:"Short"},50729:{name:"AsShotWhiteXY",type:"Rational"},50730:{name:"BaselineExposure",type:"SRational"},50731:{name:"BaselineNoise",type:"Rational"},50732:{name:"BaselineSharpness",type:"Rational"},50733:{name:"BayerGreenSplit",type:"Long"},50734:{name:"LinearResponseLimit",type:"Rational"},50735:{name:"CameraSerialNumber",type:"Ascii"},50736:{name:"LensInfo",type:"Rational"},50737:{name:"ChromaBlurRadius",type:"Rational"},50738:{name:"AntiAliasStrength",type:"Rational"},50739:{name:"ShadowScale",type:"SRational"},50740:{name:"DNGPrivateData",type:"Byte"},50741:{name:"MakerNoteSafety",type:"Short"},50778:{name:"CalibrationIlluminant1",type:"Short"},50779:{name:"CalibrationIlluminant2",type:"Short"},50780:{name:"BestQualityScale",type:"Rational"},50781:{name:"RawDataUniqueID",type:"Byte"},50827:{name:"OriginalRawFileName",type:"Byte"},50828:{name:"OriginalRawFileData",type:"Undefined"},50829:{name:"ActiveArea",type:"Short"},50830:{name:"MaskedAreas",type:"Short"},50831:{name:"AsShotICCProfile",type:"Undefined"},50832:{name:"AsShotPreProfileMatrix",type:"SRational"},50833:{name:"CurrentICCProfile",type:"Undefined"},50834:{name:"CurrentPreProfileMatrix",type:"SRational"},50879:{name:"ColorimetricReference",type:"Short"},50931:{name:"CameraCalibrationSignature",type:"Byte"},50932:{name:"ProfileCalibrationSignature",type:"Byte"},50934:{name:"AsShotProfileName",type:"Byte"},50935:{name:"NoiseReductionApplied",type:"Rational"},50936:{name:"ProfileName",type:"Byte"},50937:{name:"ProfileHueSatMapDims",type:"Long"},50938:{name:"ProfileHueSatMapData1",type:"Float"},50939:{name:"ProfileHueSatMapData2",type:"Float"},50940:{name:"ProfileToneCurve",type:"Float"},50941:{name:"ProfileEmbedPolicy",type:"Long"},50942:{name:"ProfileCopyright",type:"Byte"},50964:{name:"ForwardMatrix1",type:"SRational"},50965:{name:"ForwardMatrix2",type:"SRational"},50966:{name:"PreviewApplicationName",type:"Byte"},50967:{name:"PreviewApplicationVersion",type:"Byte"},50968:{name:"PreviewSettingsName",type:"Byte"},50969:{name:"PreviewSettingsDigest",type:"Byte"},50970:{name:"PreviewColorSpace",type:"Long"},50971:{name:"PreviewDateTime",type:"Ascii"},50972:{name:"RawImageDigest",type:"Undefined"},50973:{name:"OriginalRawFileDigest",type:"Undefined"},50974:{name:"SubTileBlockSize",type:"Long"},50975:{name:"RowInterleaveFactor",type:"Long"},50981:{name:"ProfileLookTableDims",type:"Long"},50982:{name:"ProfileLookTableData",type:"Float"},51008:{name:"OpcodeList1",type:"Undefined"},51009:{name:"OpcodeList2",type:"Undefined"},51022:{name:"OpcodeList3",type:"Undefined"}},Exif:{33434:{name:"ExposureTime",type:"Rational"},33437:{name:"FNumber",type:"Rational"},34850:{name:"ExposureProgram",type:"Short"},34852:{name:"SpectralSensitivity",type:"Ascii"},34855:{name:"ISOSpeedRatings",type:"Short"},34856:{name:"OECF",type:"Undefined"},34864:{name:"SensitivityType",type:"Short"},34865:{name:"StandardOutputSensitivity",type:"Long"},34866:{name:"RecommendedExposureIndex",type:"Long"},34867:{name:"ISOSpeed",type:"Long"},34868:{name:"ISOSpeedLatitudeyyy",type:"Long"},34869:{name:"ISOSpeedLatitudezzz",type:"Long"},36864:{name:"ExifVersion",type:"Undefined"},36867:{name:"DateTimeOriginal",type:"Ascii"},36868:{name:"DateTimeDigitized",type:"Ascii"},37121:{name:"ComponentsConfiguration",type:"Undefined"},37122:{name:"CompressedBitsPerPixel",type:"Rational"},37377:{name:"ShutterSpeedValue",type:"SRational"},37378:{name:"ApertureValue",type:"Rational"},37379:{name:"BrightnessValue",type:"SRational"},37380:{name:"ExposureBiasValue",type:"SRational"},37381:{name:"MaxApertureValue",type:"Rational"},37382:{name:"SubjectDistance",type:"Rational"},37383:{name:"MeteringMode",type:"Short"},37384:{name:"LightSource",type:"Short"},37385:{name:"Flash",type:"Short"},37386:{name:"FocalLength",type:"Rational"},37396:{name:"SubjectArea",type:"Short"},37500:{name:"MakerNote",type:"Undefined"},37510:{name:"UserComment",type:"Ascii"},37520:{name:"SubSecTime",type:"Ascii"},37521:{name:"SubSecTimeOriginal",type:"Ascii"},37522:{name:"SubSecTimeDigitized",type:"Ascii"},40960:{name:"FlashpixVersion",type:"Undefined"},40961:{name:"ColorSpace",type:"Short"},40962:{name:"PixelXDimension",type:"Long"},40963:{name:"PixelYDimension",type:"Long"},40964:{name:"RelatedSoundFile",type:"Ascii"},40965:{name:"InteroperabilityTag",type:"Long"},41483:{name:"FlashEnergy",type:"Rational"},41484:{name:"SpatialFrequencyResponse",type:"Undefined"},41486:{name:"FocalPlaneXResolution",type:"Rational"},41487:{name:"FocalPlaneYResolution",type:"Rational"},41488:{name:"FocalPlaneResolutionUnit",type:"Short"},41492:{name:"SubjectLocation",type:"Short"},41493:{name:"ExposureIndex",type:"Rational"},41495:{name:"SensingMethod",type:"Short"},41728:{name:"FileSource",type:"Undefined"},41729:{name:"SceneType",type:"Undefined"},41730:{name:"CFAPattern",type:"Undefined"},41985:{name:"CustomRendered",type:"Short"},41986:{name:"ExposureMode",type:"Short"},41987:{name:"WhiteBalance",type:"Short"},41988:{name:"DigitalZoomRatio",type:"Rational"},41989:{name:"FocalLengthIn35mmFilm",type:"Short"},41990:{name:"SceneCaptureType",type:"Short"},41991:{name:"GainControl",type:"Short"},41992:{name:"Contrast",type:"Short"},41993:{name:"Saturation",type:"Short"},41994:{name:"Sharpness",type:"Short"},41995:{name:"DeviceSettingDescription",type:"Undefined"},41996:{name:"SubjectDistanceRange",type:"Short"},42016:{name:"ImageUniqueID",type:"Ascii"},42032:{name:"CameraOwnerName",type:"Ascii"},42033:{name:"BodySerialNumber",type:"Ascii"},42034:{name:"LensSpecification",type:"Rational"},42035:{name:"LensMake",type:"Ascii"},42036:{name:"LensModel",type:"Ascii"},42037:{name:"LensSerialNumber",type:"Ascii"},42240:{name:"Gamma",type:"Rational"}},GPS:{0:{name:"GPSVersionID",type:"Byte"},1:{name:"GPSLatitudeRef",type:"Ascii"},2:{name:"GPSLatitude",type:"Rational"},3:{name:"GPSLongitudeRef",type:"Ascii"},4:{name:"GPSLongitude",type:"Rational"},5:{name:"GPSAltitudeRef",type:"Byte"},6:{name:"GPSAltitude",type:"Rational"},7:{name:"GPSTimeStamp",type:"Rational"},8:{name:"GPSSatellites",type:"Ascii"},9:{name:"GPSStatus",type:"Ascii"},10:{name:"GPSMeasureMode",type:"Ascii"},11:{name:"GPSDOP",type:"Rational"},12:{name:"GPSSpeedRef",type:"Ascii"},13:{name:"GPSSpeed",type:"Rational"},14:{name:"GPSTrackRef",type:"Ascii"},15:{name:"GPSTrack",type:"Rational"},16:{name:"GPSImgDirectionRef",type:"Ascii"},17:{name:"GPSImgDirection",type:"Rational"},18:{name:"GPSMapDatum",type:"Ascii"},19:{name:"GPSDestLatitudeRef",type:"Ascii"},20:{name:"GPSDestLatitude",type:"Rational"},21:{name:"GPSDestLongitudeRef",type:"Ascii"},22:{name:"GPSDestLongitude",type:"Rational"},23:{name:"GPSDestBearingRef",type:"Ascii"},24:{name:"GPSDestBearing",type:"Rational"},25:{name:"GPSDestDistanceRef",type:"Ascii"},26:{name:"GPSDestDistance",type:"Rational"},27:{name:"GPSProcessingMethod",type:"Undefined"},28:{name:"GPSAreaInformation",type:"Undefined"},29:{name:"GPSDateStamp",type:"Ascii"},30:{name:"GPSDifferential",type:"Short"},31:{name:"GPSHPositioningError",type:"Rational"}},Interop:{1:{name:"InteroperabilityIndex",type:"Ascii"}}};TAGS["0th"]=TAGS["Image"];TAGS["1st"]=TAGS["Image"];that.TAGS=TAGS;that.ImageIFD={ProcessingSoftware:11,NewSubfileType:254,SubfileType:255,ImageWidth:256,ImageLength:257,BitsPerSample:258,Compression:259,PhotometricInterpretation:262,Threshholding:263,CellWidth:264,CellLength:265,FillOrder:266,DocumentName:269,ImageDescription:270,Make:271,Model:272,StripOffsets:273,Orientation:274,SamplesPerPixel:277,RowsPerStrip:278,StripByteCounts:279,XResolution:282,YResolution:283,PlanarConfiguration:284,GrayResponseUnit:290,GrayResponseCurve:291,T4Options:292,T6Options:293,ResolutionUnit:296,TransferFunction:301,Software:305,DateTime:306,Artist:315,HostComputer:316,Predictor:317,WhitePoint:318,PrimaryChromaticities:319,ColorMap:320,HalftoneHints:321,TileWidth:322,TileLength:323,TileOffsets:324,TileByteCounts:325,SubIFDs:330,InkSet:332,InkNames:333,NumberOfInks:334,DotRange:336,TargetPrinter:337,ExtraSamples:338,SampleFormat:339,SMinSampleValue:340,SMaxSampleValue:341,TransferRange:342,ClipPath:343,XClipPathUnits:344,YClipPathUnits:345,Indexed:346,JPEGTables:347,OPIProxy:351,JPEGProc:512,JPEGInterchangeFormat:513,JPEGInterchangeFormatLength:514,JPEGRestartInterval:515,JPEGLosslessPredictors:517,JPEGPointTransforms:518,JPEGQTables:519,JPEGDCTables:520,JPEGACTables:521,YCbCrCoefficients:529,YCbCrSubSampling:530,YCbCrPositioning:531,ReferenceBlackWhite:532,XMLPacket:700,Rating:18246,RatingPercent:18249,ImageID:32781,CFARepeatPatternDim:33421,CFAPattern:33422,BatteryLevel:33423,Copyright:33432,ExposureTime:33434,ImageResources:34377,ExifTag:34665,InterColorProfile:34675,GPSTag:34853,Interlace:34857,TimeZoneOffset:34858,SelfTimerMode:34859,FlashEnergy:37387,SpatialFrequencyResponse:37388,Noise:37389,FocalPlaneXResolution:37390,FocalPlaneYResolution:37391,FocalPlaneResolutionUnit:37392,ImageNumber:37393,SecurityClassification:37394,ImageHistory:37395,ExposureIndex:37397,TIFFEPStandardID:37398,SensingMethod:37399,XPTitle:40091,XPComment:40092,XPAuthor:40093,XPKeywords:40094,XPSubject:40095,PrintImageMatching:50341,DNGVersion:50706,DNGBackwardVersion:50707,UniqueCameraModel:50708,LocalizedCameraModel:50709,CFAPlaneColor:50710,CFALayout:50711,LinearizationTable:50712,BlackLevelRepeatDim:50713,BlackLevel:50714,BlackLevelDeltaH:50715,BlackLevelDeltaV:50716,WhiteLevel:50717,DefaultScale:50718,DefaultCropOrigin:50719,DefaultCropSize:50720,ColorMatrix1:50721,ColorMatrix2:50722,CameraCalibration1:50723,CameraCalibration2:50724,ReductionMatrix1:50725,ReductionMatrix2:50726,AnalogBalance:50727,AsShotNeutral:50728,AsShotWhiteXY:50729,BaselineExposure:50730,BaselineNoise:50731,BaselineSharpness:50732,BayerGreenSplit:50733,LinearResponseLimit:50734,CameraSerialNumber:50735,LensInfo:50736,ChromaBlurRadius:50737,AntiAliasStrength:50738,ShadowScale:50739,DNGPrivateData:50740,MakerNoteSafety:50741,CalibrationIlluminant1:50778,CalibrationIlluminant2:50779,BestQualityScale:50780,RawDataUniqueID:50781,OriginalRawFileName:50827,OriginalRawFileData:50828,ActiveArea:50829,MaskedAreas:50830,AsShotICCProfile:50831,AsShotPreProfileMatrix:50832,CurrentICCProfile:50833,CurrentPreProfileMatrix:50834,ColorimetricReference:50879,CameraCalibrationSignature:50931,ProfileCalibrationSignature:50932,AsShotProfileName:50934,NoiseReductionApplied:50935,ProfileName:50936,ProfileHueSatMapDims:50937,ProfileHueSatMapData1:50938,ProfileHueSatMapData2:50939,ProfileToneCurve:50940,ProfileEmbedPolicy:50941,ProfileCopyright:50942,ForwardMatrix1:50964,ForwardMatrix2:50965,PreviewApplicationName:50966,PreviewApplicationVersion:50967,PreviewSettingsName:50968,PreviewSettingsDigest:50969,PreviewColorSpace:50970,PreviewDateTime:50971,RawImageDigest:50972,OriginalRawFileDigest:50973,SubTileBlockSize:50974,RowInterleaveFactor:50975,ProfileLookTableDims:50981,ProfileLookTableData:50982,OpcodeList1:51008,OpcodeList2:51009,OpcodeList3:51022,NoiseProfile:51041};that.ExifIFD={ExposureTime:33434,FNumber:33437,ExposureProgram:34850,SpectralSensitivity:34852,ISOSpeedRatings:34855,OECF:34856,SensitivityType:34864,StandardOutputSensitivity:34865,RecommendedExposureIndex:34866,ISOSpeed:34867,ISOSpeedLatitudeyyy:34868,ISOSpeedLatitudezzz:34869,ExifVersion:36864,DateTimeOriginal:36867,DateTimeDigitized:36868,ComponentsConfiguration:37121,CompressedBitsPerPixel:37122,ShutterSpeedValue:37377,ApertureValue:37378,BrightnessValue:37379,ExposureBiasValue:37380,MaxApertureValue:37381,SubjectDistance:37382,MeteringMode:37383,LightSource:37384,Flash:37385,FocalLength:37386,SubjectArea:37396,MakerNote:37500,UserComment:37510,SubSecTime:37520,SubSecTimeOriginal:37521,SubSecTimeDigitized:37522,FlashpixVersion:40960,ColorSpace:40961,PixelXDimension:40962,PixelYDimension:40963,RelatedSoundFile:40964,InteroperabilityTag:40965,FlashEnergy:41483,SpatialFrequencyResponse:41484,FocalPlaneXResolution:41486,FocalPlaneYResolution:41487,FocalPlaneResolutionUnit:41488,SubjectLocation:41492,ExposureIndex:41493,SensingMethod:41495,FileSource:41728,SceneType:41729,CFAPattern:41730,CustomRendered:41985,ExposureMode:41986,WhiteBalance:41987,DigitalZoomRatio:41988,FocalLengthIn35mmFilm:41989,SceneCaptureType:41990,GainControl:41991,Contrast:41992,Saturation:41993,Sharpness:41994,DeviceSettingDescription:41995,SubjectDistanceRange:41996,ImageUniqueID:42016,CameraOwnerName:42032,BodySerialNumber:42033,LensSpecification:42034,LensMake:42035,LensModel:42036,LensSerialNumber:42037,Gamma:42240};that.GPSIFD={GPSVersionID:0,GPSLatitudeRef:1,GPSLatitude:2,GPSLongitudeRef:3,GPSLongitude:4,GPSAltitudeRef:5,GPSAltitude:6,GPSTimeStamp:7,GPSSatellites:8,GPSStatus:9,GPSMeasureMode:10,GPSDOP:11,GPSSpeedRef:12,GPSSpeed:13,GPSTrackRef:14,GPSTrack:15,GPSImgDirectionRef:16,GPSImgDirection:17,GPSMapDatum:18,GPSDestLatitudeRef:19,GPSDestLatitude:20,GPSDestLongitudeRef:21,GPSDestLongitude:22,GPSDestBearingRef:23,GPSDestBearing:24,GPSDestDistanceRef:25,GPSDestDistance:26,GPSProcessingMethod:27,GPSAreaInformation:28,GPSDateStamp:29,GPSDifferential:30,GPSHPositioningError:31};that.InteropIFD={InteroperabilityIndex:1};that.GPSHelper={degToDmsRational:function(degFloat){var degAbs=Math.abs(degFloat);var minFloat=degAbs%1*60;var secFloat=minFloat%1*60;var deg=Math.floor(degAbs);var min=Math.floor(minFloat);var sec=Math.round(secFloat*100);return[[deg,1],[min,1],[sec,100]]},dmsRationalToDeg:function(dmsArray,ref){var sign=ref==="S"||ref==="W"?-1:1;var deg=dmsArray[0][0]/dmsArray[0][1]+dmsArray[1][0]/dmsArray[1][1]/60+dmsArray[2][0]/dmsArray[2][1]/3600;return deg*sign}};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=that}exports.piexif=that}else{window.piexif=that}})();