1// [email protected] downloaded from https://ga.jspm.io/npm:[email protected]/exif.js 2 3var e;var t="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:global;var n={};(function(){var r=false;var a=this||t;var EXIF=function(e){if(e instanceof EXIF)return e;if(!((this||t)instanceof EXIF))return new EXIF(e);(this||t).EXIFwrapped=e};n&&(n=n=EXIF);n.EXIF=EXIF;var i=EXIF.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"E
3xposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"};var o=EXIF.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"};var s=EXIF.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"};var l=EXIF.IFD1Tags={256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",296:"ResolutionUnit",513:"JpegIFOffset",514:"JpegIFByteCount",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite"};var u=EXIF.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}};function addEvent(e,t,n){e.addEventListener?e.addEventListener(t,n,false):e.attachEvent&&e.attachEvent("on"+t,n)}function imageHasData(e){return!!e.exifdata}function base64ToArrayBuffer(e,t){t=t||e.match(/^data\:([^\;]+)\;base64,/im)[1]||"";e=e.replace(/^data\:([^\;]+)\;base64,/gim,"");var n=atob(e);var r=n.length;var a=new ArrayBuffer(r);var i=new Uint8Array(a);for(var o=0;o<r;o++)i[o]=n.charCodeAt(o);return a}function objectURLToBlob(e,n){var r=new XMLHttpRequest;r.open("GET",e,true);r.responseType="blob";r.onload=function(e){200!=(this||t).status&&0!==(this||t).status||n((this||t).response)};r.send()}function getImageData(e,n){function handleBinaryFile(t){var r=findEXIFinJPEG(t);e.exifdata=r||{};var a=findIPTCinJPEG(t);e.iptcdata=a||{};if(EXIF.isXmpEnabled){var i=findXMPinJPEG(t);e.xmpdata=i||{}}n&&n.call(e)}if(e.src)if(/^data\:/i.test(e.src)){var a=base64ToArrayBuffer(e.src);handleBinaryFile(a)}else if(/^blob\:/i.test(e.src)){var i=new FileReader;i.onload=function(e){handleBinaryFile(e.target.result)};objectURLToBlob(e.src,(function(e){i.readAsArrayBuffer(e)}))}else{var o=new XMLHttpRequest;o.onload=function(){if(200!=(this||t).status&&0!==(this||t).status)throw"Could not load image";handleBinaryFile(o.response);o=null};o.open("GET",e.src,true);o.responseType="arraybuffer";o.send(null)}else if(self.FileReader&&(e instanceof self.Blob||e instanceof self.File)){var i=new FileReader;i.onload=function(e){r&&console.log("Got file of length "+e.target.result.byteLength);handleBinaryFile(e.target.result)};i.readAsArrayBuffer(e)}}function findEXIFinJPEG(e){var t=new DataView(e);r&&console.log("Got file of length "+e.byteLength);if(255!=t.getUint8(0)||216!=t.getUint8(1)){r&&console.log("Not a valid JPEG");return false}var n=2,a=e.byteLength,i;
3while(n<a){if(255!=t.getUint8(n)){r&&console.log("Not a valid marker at offset "+n+", found: "+t.getUint8(n));return false}i=t.getUint8(n+1);r&&console.log(i);if(225==i){r&&console.log("Found 0xFFE1 marker");return readEXIFData(t,n+4,t.getUint16(n+2)-2)}n+=2+t.getUint16(n+2)}}function findIPTCinJPEG(e){var t=new DataView(e);r&&console.log("Got file of length "+e.byteLength);if(255!=t.getUint8(0)||216!=t.getUint8(1)){r&&console.log("Not a valid JPEG");return false}var n=2,a=e.byteLength;var isFieldSegmentStart=function(e,t){return 56===e.getUint8(t)&&66===e.getUint8(t+1)&&73===e.getUint8(t+2)&&77===e.getUint8(t+3)&&4===e.getUint8(t+4)&&4===e.getUint8(t+5)};while(n<a){if(isFieldSegmentStart(t,n)){var i=t.getUint8(n+7);i%2!==0&&(i+=1);0===i&&(i=4);var o=n+8+i;var s=t.getUint16(n+6+i);return readIPTCData(e,o,s);break}n++}}var f={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};function readIPTCData(e,t,n){var r=new DataView(e);var a={};var i,o,s,l,u;var d=t;while(d<t+n){if(28===r.getUint8(d)&&2===r.getUint8(d+1)){l=r.getUint8(d+2);if(l in f){s=r.getInt16(d+3);u=s+5;o=f[l];i=getStringFromDB(r,d+5,s);a.hasOwnProperty(o)?a[o]instanceof Array?a[o].push(i):a[o]=[a[o],i]:a[o]=i}}d++}return a}function readTags(e,t,n,a,i){var o=e.getUint16(n,!i),s={},l,u,f;for(f=0;f<o;f++){l=n+12*f+2;u=a[e.getUint16(l,!i)];!u&&r&&console.log("Unknown tag: "+e.getUint16(l,!i));s[u]=readTagValue(e,l,t,n,i)}return s}function readTagValue(e,t,n,r,a){var i=e.getUint16(t+2,!a),o=e.getUint32(t+4,!a),s=e.getUint32(t+8,!a)+n,l,u,f,d,g,c;switch(i){case 1:case 7:if(1==o)return e.getUint8(t+8,!a);l=o>4?s:t+8;u=[];for(d=0;d<o;d++)u[d]=e.getUint8(l+d);return u;case 2:l=o>4?s:t+8;return getStringFromDB(e,l,o-1);case 3:if(1==o)return e.getUint16(t+8,!a);l=o>2?s:t+8;u=[];for(d=0;d<o;d++)u[d]=e.getUint16(l+2*d,!a);return u;case 4:if(1==o)return e.getUint32(t+8,!a);u=[];for(d=0;d<o;d++)u[d]=e.getUint32(s+4*d,!a);return u;case 5:if(1==o){g=e.getUint32(s,!a);c=e.getUint32(s+4,!a);f=new Number(g/c);f.numerator=g;f.denominator=c;return f}u=[];for(d=0;d<o;d++){g=e.getUint32(s+8*d,!a);c=e.getUint32(s+4+8*d,!a);u[d]=new Number(g/c);u[d].numerator=g;u[d].denominator=c}return u;case 9:if(1==o)return e.getInt32(t+8,!a);u=[];for(d=0;d<o;d++)u[d]=e.getInt32(s+4*d,!a);return u;case 10:if(1==o)return e.getInt32(s,!a)/e.getInt32(s+4,!a);u=[];for(d=0;d<o;d++)u[d]=e.getInt32(s+8*d,!a)/e.getInt32(s+4+8*d,!a);return u}}function getNextIFDOffset(e,t,n){var r=e.getUint16(t,!n);return e.getUint32(t+2+12*r,!n)}function readThumbnailImage(e,t,n,r){var a=getNextIFDOffset(e,t+n,r);if(!a)return{};if(a>e.byteLength)return{};var i=readTags(e,t,t+a,l,r);if(i["Compression"])switch(i["Compression"]){case 6:if(i.JpegIFOffset&&i.JpegIFByteCount){var o=t+i.JpegIFOffset;var s=i.JpegIFByteCount;i["blob"]=new Blob([new Uint8Array(e.buffer,o,s)],{type:"image/jpeg"})}break;case 1:console.log("Thumbnail image format is TIFF, which is not implemented.");break;default:console.log("Unknown thumbnail image format '%s'",i["Compression"])}else 2==i["PhotometricInterpretation"]&&console.log("Thumbnail image format is RGB, which is not implemented.");return i}function getStringFromDB(n,r,a){var i="";for(t.n=e=r;e<r+a;e++)i+=String.fromCharCode(n.getUint8(e));return i}function readEXIFData(e,t){if("Exif"!=getStringFromDB(e,t,4)){r&&console.log("Not valid EXIF data! "+getStringFromDB(e,t,4));return false}var n,a,l,f,d,g=t+6;if(18761==e.getUint16(g))n=false;else{if(19789!=e.getUint16(g)){r&&console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)");return false}n=true}if(42!=e.getUint16(g+2,!n)){r&&console.log("Not valid TIFF data! (no 0x002A)");return false}var c=e.getUint32(g+4,!n);if(c<8){r&&console.log("Not valid TIFF data! (First offset less than 8)",e.getUint32(g+4,!n));return false}a=readTags(e,g,g+c,o,n);if(a.ExifIFDPointer){f=readTags(e,g,g+a.ExifIFDPointer,i,n);for(l in f){switch(l){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":f[l]=u[l][f[l]];break;case"ExifVersion":case"FlashpixVersion":f[l]=String.fromCharCode(f[l][0],f[l][1],f[l][2],f[l][3]);break;case"ComponentsConfiguration":f[l]=u.Components[f[l][0]]+u.Components[f[l][1]]+u.Components[f[l][2]]+u.Components[f[l][3]];break}a[l]=f[l]}}if(a.GPSInfoIFDPointer){d=readTags(e,g,g+a.GPSInfoIFDPointer,s,n);for(l in d){switch(l){case"GPSVersionID":d[l]=d[l][0]+"."+d[l][1]+"."+d[l][2]+"."+d[l][3];break}a[l]=d[l]}}a["thumbnail"]=readThumbnailImage(e,g,c,n);return a}function findXMPinJPEG(e){if("DOMParser"in self){var t=new DataView(e);r&&console.log("Got file of length "+e.byteLength);if(255!=t.getUint8(0)||216!=t.getUint8(1)){r&&console.log("Not a valid JPEG");return false}var n=2,a=e.byteLength,i=new DOMParser;while(n<a-4){if("http"==getStringFromDB(t,n,4)){var o=n-1;var s=t.getUint16(n-2)-1;var l=getStringFromDB(t,o,s);var u=l.indexOf("xmpmeta>")+8;l=l.substring(l.indexOf("<x:xmpmeta"),u);var f=l.indexOf("x:xmpmeta")+10;l=l.slice(0,f)+'xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" '+'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '+'xmlns:tiff="http://ns.adobe.com/tiff/1.0/" '+'xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" '+'xmlns:ext="http://www.gettyimages.com/xsltExtension/1.0" '+'xmlns:exif="http://ns.adobe.com/exif/1.0/" '+'xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" '+'xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" '+'xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.
30/" '+'xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" '+'xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" '+l.slice(f);var d=i.parseFromString(l,"text/xml");return xml2Object(d)}n++}}}function xml2json(e){var t={};if(1==e.nodeType){if(e.attributes.length>0){t["@attributes"]={};for(var n=0;n<e.attributes.length;n++){var r=e.attributes.item(n);t["@attributes"][r.nodeName]=r.nodeValue}}}else if(3==e.nodeType)return e.nodeValue;if(e.hasChildNodes())for(var a=0;a<e.childNodes.length;a++){var i=e.childNodes.item(a);var o=i.nodeName;if(null==t[o])t[o]=xml2json(i);else{if(null==t[o].push){var s=t[o];t[o]=[];t[o].push(s)}t[o].push(xml2json(i))}}return t}function xml2Object(e){try{var t={};if(e.children.length>0)for(var n=0;n<e.children.length;n++){var r=e.children.item(n);var a=r.attributes;for(var i in a){var o=a[i];var s=o.nodeName;var l=o.nodeValue;void 0!==s&&(t[s]=l)}var u=r.nodeName;if("undefined"==typeof t[u])t[u]=xml2json(r);else{if("undefined"==typeof t[u].push){var f=t[u];t[u]=[];t[u].push(f)}t[u].push(xml2json(r))}}else t=e.textContent;return t}catch(e){console.log(e.message)}}EXIF.enableXmp=function(){EXIF.isXmpEnabled=true};EXIF.disableXmp=function(){EXIF.isXmpEnabled=false};EXIF.getData=function(e,t){if((self.Image&&e instanceof self.Image||self.HTMLImageElement&&e instanceof self.HTMLImageElement)&&!e.complete)return false;imageHasData(e)?t&&t.call(e):getImageData(e,t);return true};EXIF.getTag=function(e,t){if(imageHasData(e))return e.exifdata[t]};EXIF.getIptcTag=function(e,t){if(imageHasData(e))return e.iptcdata[t]};EXIF.getAllTags=function(e){if(!imageHasData(e))return{};var t,n=e.exifdata,r={};for(t in n)n.hasOwnProperty(t)&&(r[t]=n[t]);return r};EXIF.getAllIptcTags=function(e){if(!imageHasData(e))return{};var t,n=e.iptcdata,r={};for(t in n)n.hasOwnProperty(t)&&(r[t]=n[t]);return r};EXIF.pretty=function(e){if(!imageHasData(e))return"";var t,n=e.exifdata,r="";for(t in n)n.hasOwnProperty(t)&&("object"==typeof n[t]?n[t]instanceof Number?r+=t+" : "+n[t]+" ["+n[t].numerator+"/"+n[t].denominator+"]\r\n":r+=t+" : ["+n[t].length+" values]\r\n":r+=t+" : "+n[t]+"\r\n");return r};EXIF.readFromBinaryFile=function(e){return findEXIFinJPEG(e)}}).call(n);var r=n;const a=n.EXIF;export default r;export{a as EXIF}; 4
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.