From 1a77af7a75d1e184abbc795cfcc4c4495cf6712a Mon Sep 17 00:00:00 2001 From: Sebastian Tschan Date: Mon, 21 Mar 2016 16:44:52 +0100 Subject: [PATCH 01/12] Revert premature version change. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c8f050..e8728ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blueimp-load-image", - "version": "2.6.1", + "version": "2.6.0", "main": "index.js", "title": "JavaScript Load Image", "description": "JavaScript Load Image is a library to load images provided as File or Blob objects or via URL. It returns an optionally scaled and/or cropped HTML img or canvas element. It also provides a method to parse image meta data to extract Exif tags and thumbnails and to restore the complete image header after resizing.", From 7b70920d9fe034c12441baf8331d2a6a1a9af201 Mon Sep 17 00:00:00 2001 From: Sebastian Tschan Date: Mon, 21 Mar 2016 16:46:11 +0100 Subject: [PATCH 02/12] StandardJS compatibility. --- index.js | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 57a9f66..635af81 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ -module.exports = require('./js/load-image'); +module.exports = require('./js/load-image') -require('./js/load-image-exif'); -require('./js/load-image-exif-map'); -require('./js/load-image-meta'); -require('./js/load-image-orientation'); +require('./js/load-image-exif') +require('./js/load-image-exif-map') +require('./js/load-image-meta') +require('./js/load-image-orientation') diff --git a/package.json b/package.json index e8728ec..c4685d0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "uglify-js": "2.6.1" }, "scripts": { - "test": "standard js/*.js test/*.js && mocha-phantomjs test/index.html", + "test": "standard *.js js/*.js test/*.js && mocha-phantomjs test/index.html", "build": "cd js && uglifyjs load-image.js load-image-orientation.js load-image-meta.js load-image-exif.js load-image-exif-map.js -c -m -o load-image.all.min.js --source-map load-image.all.min.js.map", "preversion": "npm test", "version": "npm run build && git add -A js", From da2e77837e81a2a0a143a77034dc01604173790a Mon Sep 17 00:00:00 2001 From: Sebastian Tschan Date: Mon, 21 Mar 2016 16:49:39 +0100 Subject: [PATCH 03/12] 2.6.1 --- js/load-image.all.min.js | 2 +- js/load-image.all.min.js.map | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/load-image.all.min.js b/js/load-image.all.min.js index 970a5df..2ec3313 100644 --- a/js/load-image.all.min.js +++ b/js/load-image.all.min.js @@ -1,2 +1,2 @@ -!function(e){"use strict";var t=function(e,i,a){var o,r,n=document.createElement("img");if(n.onerror=i,n.onload=function(){!r||a&&a.noRevoke||t.revokeObjectURL(r),i&&i(t.scale(n,a))},t.isInstanceOf("Blob",e)||t.isInstanceOf("File",e))o=r=t.createObjectURL(e),n._type=e.type;else{if("string"!=typeof e)return!1;o=e,a&&a.crossOrigin&&(n.crossOrigin=a.crossOrigin)}return o?(n.src=o,n):t.readFile(e,function(e){var t=e.target;t&&t.result?n.src=t.result:i&&i(e)})},i=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;t.isInstanceOf=function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"},t.transformCoordinates=function(){},t.getTransformedOptions=function(e,t){var i,a,o,r,n=t.aspectRatio;if(!n)return t;i={};for(a in t)t.hasOwnProperty(a)&&(i[a]=t[a]);return i.crop=!0,o=e.naturalWidth||e.width,r=e.naturalHeight||e.height,o/r>n?(i.maxWidth=r*n,i.maxHeight=r):(i.maxWidth=o,i.maxHeight=o/n),i},t.renderImageToCanvas=function(e,t,i,a,o,r,n,s,l,d){return e.getContext("2d").drawImage(t,i,a,o,r,n,s,l,d),e},t.hasCanvasOption=function(e){return e.canvas||e.crop||!!e.aspectRatio},t.scale=function(e,i){function a(){var e=Math.max((s||y)/y,(l||v)/v);e>1&&(y*=e,v*=e)}function o(){var e=Math.min((r||y)/y,(n||v)/v);1>e&&(y*=e,v*=e)}i=i||{};var r,n,s,l,d,u,c,g,f,h,m,p=document.createElement("canvas"),S=e.getContext||t.hasCanvasOption(i)&&p.getContext,b=e.naturalWidth||e.width,x=e.naturalHeight||e.height,y=b,v=x;if(S&&(i=t.getTransformedOptions(e,i),c=i.left||0,g=i.top||0,i.sourceWidth?(d=i.sourceWidth,void 0!==i.right&&void 0===i.left&&(c=b-d-i.right)):d=b-c-(i.right||0),i.sourceHeight?(u=i.sourceHeight,void 0!==i.bottom&&void 0===i.top&&(g=x-u-i.bottom)):u=x-g-(i.bottom||0),y=d,v=u),r=i.maxWidth,n=i.maxHeight,s=i.minWidth,l=i.minHeight,S&&r&&n&&i.crop?(y=r,v=n,m=d/u-r/n,0>m?(u=n*d/r,void 0===i.top&&void 0===i.bottom&&(g=(x-u)/2)):m>0&&(d=r*u/n,void 0===i.left&&void 0===i.right&&(c=(b-d)/2))):((i.contain||i.cover)&&(s=r=r||s,l=n=n||l),i.cover?(o(),a()):(a(),o())),S){if(f=i.pixelRatio,f>1&&(p.style.width=y+"px",p.style.height=v+"px",y*=f,v*=f,p.getContext("2d").scale(f,f)),h=i.downsamplingRatio,h>0&&1>h&&d>y&&u>v)for(;d*h>y;)p.width=d*h,p.height=u*h,t.renderImageToCanvas(p,e,c,g,d,u,0,0,p.width,p.height),d=p.width,u=p.height,e=document.createElement("canvas"),e.width=d,e.height=u,t.renderImageToCanvas(e,p,0,0,d,u,0,0,d,u);return p.width=y,p.height=v,t.transformCoordinates(p,i),t.renderImageToCanvas(p,e,c,g,d,u,0,0,y,v)}return e.width=y,e.height=v,e},t.createObjectURL=function(e){return i?i.createObjectURL(e):!1},t.revokeObjectURL=function(e){return i?i.revokeObjectURL(e):!1},t.readFile=function(e,t,i){if(window.FileReader){var a=new FileReader;if(a.onload=a.onerror=t,i=i||"readAsDataURL",a[i])return a[i](e),a}return!1},"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:e.loadImage=t}(window),function(e){"use strict";"function"==typeof define&&define.amd?define(["load-image"],e):e("object"==typeof module&&module.exports?require("./load-image"):window.loadImage)}(function(e){"use strict";var t=e.hasCanvasOption,i=e.transformCoordinates,a=e.getTransformedOptions;e.hasCanvasOption=function(i){return!!i.orientation||t.call(e,i)},e.transformCoordinates=function(t,a){i.call(e,t,a);var o=t.getContext("2d"),r=t.width,n=t.height,s=t.style.width,l=t.style.height,d=a.orientation;if(d&&!(d>8))switch(d>4&&(t.width=n,t.height=r,t.style.width=l,t.style.height=s),d){case 2:o.translate(r,0),o.scale(-1,1);break;case 3:o.translate(r,n),o.rotate(Math.PI);break;case 4:o.translate(0,n),o.scale(1,-1);break;case 5:o.rotate(.5*Math.PI),o.scale(1,-1);break;case 6:o.rotate(.5*Math.PI),o.translate(0,-n);break;case 7:o.rotate(.5*Math.PI),o.translate(r,-n),o.scale(-1,1);break;case 8:o.rotate(-.5*Math.PI),o.translate(-r,0)}},e.getTransformedOptions=function(t,i){var o,r,n=a.call(e,t,i),s=n.orientation;if(!s||s>8||1===s)return n;o={};for(r in n)n.hasOwnProperty(r)&&(o[r]=n[r]);switch(n.orientation){case 2:o.left=n.right,o.right=n.left;break;case 3:o.left=n.right,o.top=n.bottom,o.right=n.left,o.bottom=n.top;break;case 4:o.top=n.bottom,o.bottom=n.top;break;case 5:o.left=n.top,o.top=n.left,o.right=n.bottom,o.bottom=n.right;break;case 6:o.left=n.top,o.top=n.right,o.right=n.bottom,o.bottom=n.left;break;case 7:o.left=n.bottom,o.top=n.right,o.right=n.top,o.bottom=n.left;break;case 8:o.left=n.bottom,o.top=n.left,o.right=n.top,o.bottom=n.right}return n.orientation>4&&(o.maxWidth=n.maxHeight,o.maxHeight=n.maxWidth,o.minWidth=n.minHeight,o.minHeight=n.minWidth,o.sourceWidth=n.sourceHeight,o.sourceHeight=n.sourceWidth),o}}),function(e){"use strict";"function"==typeof define&&define.amd?define(["load-image"],e):e("object"==typeof module&&module.exports?require("./load-image"):window.loadImage)}(function(e){"use strict";var t=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice);e.blobSlice=t&&function(){var e=this.slice||this.webkitSlice||this.mozSlice;return e.apply(this,arguments)},e.metaDataParsers={jpeg:{65505:[]}},e.parseMetaData=function(t,i,a){a=a||{};var o=this,r=a.maxMetaDataSize||262144,n={},s=!(window.DataView&&t&&t.size>=12&&"image/jpeg"===t.type&&e.blobSlice);(s||!e.readFile(e.blobSlice.call(t,0,r),function(t){if(t.target.error)return console.log(t.target.error),void i(n);var r,s,l,d,u=t.target.result,c=new DataView(u),g=2,f=c.byteLength-4,h=g;if(65496===c.getUint16(0)){for(;f>g&&(r=c.getUint16(g),r>=65504&&65519>=r||65534===r);){if(s=c.getUint16(g+2)+2,g+s>c.byteLength){console.log("Invalid meta data: Invalid segment size.");break}if(l=e.metaDataParsers.jpeg[r])for(d=0;d6&&(u.slice?n.imageHead=u.slice(0,h):n.imageHead=new Uint8Array(u).subarray(0,h))}else console.log("Invalid JPEG file: Missing JPEG marker.");i(n)},"readAsArrayBuffer"))&&i(n)}}),function(e){"use strict";"function"==typeof define&&define.amd?define(["load-image","load-image-meta"],e):"object"==typeof module&&module.exports?e(require("./load-image"),require("./load-image-meta")):e(window.loadImage)}(function(e){"use strict";e.ExifMap=function(){return this},e.ExifMap.prototype.map={Orientation:274},e.ExifMap.prototype.get=function(e){return this[e]||this[this.map[e]]},e.getExifThumbnail=function(e,t,i){var a,o,r;if(!i||t+i>e.byteLength)return void console.log("Invalid Exif data: Invalid thumbnail data.");for(a=[],o=0;i>o;o+=1)r=e.getUint8(t+o),a.push((16>r?"0":"")+r.toString(16));return"data:image/jpeg,%"+a.join("%")},e.exifTagTypes={1:{getValue:function(e,t){return e.getUint8(t)},size:1},2:{getValue:function(e,t){return String.fromCharCode(e.getUint8(t))},size:1,ascii:!0},3:{getValue:function(e,t,i){return e.getUint16(t,i)},size:2},4:{getValue:function(e,t,i){return e.getUint32(t,i)},size:4},5:{getValue:function(e,t,i){return e.getUint32(t,i)/e.getUint32(t+4,i)},size:8},9:{getValue:function(e,t,i){return e.getInt32(t,i)},size:4},10:{getValue:function(e,t,i){return e.getInt32(t,i)/e.getInt32(t+4,i)},size:8}},e.exifTagTypes[7]=e.exifTagTypes[1],e.getExifValue=function(t,i,a,o,r,n){var s,l,d,u,c,g,f=e.exifTagTypes[o];if(!f)return void console.log("Invalid Exif data: Invalid tag type.");if(s=f.size*r,l=s>4?i+t.getUint32(a+8,n):a+8,l+s>t.byteLength)return void console.log("Invalid Exif data: Invalid data offset.");if(1===r)return f.getValue(t,l,n);for(d=[],u=0;r>u;u+=1)d[u]=f.getValue(t,l+u*f.size,n);if(f.ascii){for(c="",u=0;ue.byteLength)return void console.log("Invalid Exif data: Invalid directory offset.");if(r=e.getUint16(i,a),n=i+2+12*r,n+4>e.byteLength)return void console.log("Invalid Exif data: Invalid directory size.");for(s=0;r>s;s+=1)this.parseExifTag(e,t,i+2+12*s,a,o);return e.getUint32(n,a)},e.parseExifData=function(t,i,a,o,r){if(!r.disableExif){var n,s,l,d=i+10;if(1165519206===t.getUint32(i+4)){if(d+8>t.byteLength)return void console.log("Invalid Exif data: Invalid segment size.");if(0!==t.getUint16(i+8))return void console.log("Invalid Exif data: Missing byte alignment offset.");switch(t.getUint16(d)){case 18761:n=!0;break;case 19789:n=!1;break;default:return void console.log("Invalid Exif data: Invalid byte alignment marker.")}if(42!==t.getUint16(d+2,n))return void console.log("Invalid Exif data: Missing TIFF marker.");s=t.getUint32(d+4,n),o.exif=new e.ExifMap,s=e.parseExifTags(t,d,d+s,n,o),s&&!r.disableExifThumbnail&&(l={exif:{}},s=e.parseExifTags(t,d,d+s,n,l),l.exif[513]&&(o.exif.Thumbnail=e.getExifThumbnail(t,d+l.exif[513],l.exif[514]))),o.exif[34665]&&!r.disableExifSub&&e.parseExifTags(t,d,d+o.exif[34665],n,o),o.exif[34853]&&!r.disableExifGps&&e.parseExifTags(t,d,d+o.exif[34853],n,o)}}},e.metaDataParsers.jpeg[65505].push(e.parseExifData)}),function(e){"use strict";"function"==typeof define&&define.amd?define(["load-image","load-image-exif"],e):"object"==typeof module&&module.exports?e(require("./load-image"),require("./load-image-exif")):e(window.loadImage)}(function(e){"use strict";e.ExifMap.prototype.tags={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",36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",42240:"Gamma",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:"PhotographicSensitivity",34856:"OECF",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",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:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"CameraOwnerName",42033:"BodySerialNumber",42034:"LensSpecification",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",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",31:"GPSHPositioningError"},e.ExifMap.prototype.stringValues={ExposureProgram:{0:"Undefined",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:"Undefined",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"},ComponentsConfiguration:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"},Orientation:{1:"top-left",2:"top-right",3:"bottom-right",4:"bottom-left",5:"left-top",6:"right-top",7:"right-bottom",8:"left-bottom"}},e.ExifMap.prototype.getText=function(e){var t=this.get(e);switch(e){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":case"Orientation":return this.stringValues[e][t];case"ExifVersion":case"FlashpixVersion":return String.fromCharCode(t[0],t[1],t[2],t[3]);case"ComponentsConfiguration":return this.stringValues[e][t[0]]+this.stringValues[e][t[1]]+this.stringValues[e][t[2]]+this.stringValues[e][t[3]];case"GPSVersionID":return t[0]+"."+t[1]+"."+t[2]+"."+t[3]}return String(t)},function(e){var t,i=e.tags,a=e.map;for(t in i)i.hasOwnProperty(t)&&(a[i[t]]=t)}(e.ExifMap.prototype),e.ExifMap.prototype.getAll=function(){var e,t,i={};for(e in this)this.hasOwnProperty(e)&&(t=this.tags[e],t&&(i[t]=this.getText(t)));return i}}); +!function(e){"use strict";var t=function(e,i,a){var o,r,n=document.createElement("img");if(n.onerror=i,n.onload=function(){!r||a&&a.noRevoke||t.revokeObjectURL(r),i&&i(t.scale(n,a))},t.isInstanceOf("Blob",e)||t.isInstanceOf("File",e))o=r=t.createObjectURL(e),n._type=e.type;else{if("string"!=typeof e)return!1;o=e,a&&a.crossOrigin&&(n.crossOrigin=a.crossOrigin)}return o?(n.src=o,n):t.readFile(e,function(e){var t=e.target;t&&t.result?n.src=t.result:i&&i(e)})},i=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;t.isInstanceOf=function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"},t.transformCoordinates=function(){},t.getTransformedOptions=function(e,t){var i,a,o,r,n=t.aspectRatio;if(!n)return t;i={};for(a in t)t.hasOwnProperty(a)&&(i[a]=t[a]);return i.crop=!0,o=e.naturalWidth||e.width,r=e.naturalHeight||e.height,o/r>n?(i.maxWidth=r*n,i.maxHeight=r):(i.maxWidth=o,i.maxHeight=o/n),i},t.renderImageToCanvas=function(e,t,i,a,o,r,n,s,l,d){return e.getContext("2d").drawImage(t,i,a,o,r,n,s,l,d),e},t.hasCanvasOption=function(e){return e.canvas||e.crop||!!e.aspectRatio},t.scale=function(e,i){function a(){var e=Math.max((s||y)/y,(l||v)/v);e>1&&(y*=e,v*=e)}function o(){var e=Math.min((r||y)/y,(n||v)/v);1>e&&(y*=e,v*=e)}i=i||{};var r,n,s,l,d,u,c,g,f,h,m,p=document.createElement("canvas"),S=e.getContext||t.hasCanvasOption(i)&&p.getContext,b=e.naturalWidth||e.width,x=e.naturalHeight||e.height,y=b,v=x;if(S&&(i=t.getTransformedOptions(e,i),c=i.left||0,g=i.top||0,i.sourceWidth?(d=i.sourceWidth,void 0!==i.right&&void 0===i.left&&(c=b-d-i.right)):d=b-c-(i.right||0),i.sourceHeight?(u=i.sourceHeight,void 0!==i.bottom&&void 0===i.top&&(g=x-u-i.bottom)):u=x-g-(i.bottom||0),y=d,v=u),r=i.maxWidth,n=i.maxHeight,s=i.minWidth,l=i.minHeight,S&&r&&n&&i.crop?(y=r,v=n,m=d/u-r/n,0>m?(u=n*d/r,void 0===i.top&&void 0===i.bottom&&(g=(x-u)/2)):m>0&&(d=r*u/n,void 0===i.left&&void 0===i.right&&(c=(b-d)/2))):((i.contain||i.cover)&&(s=r=r||s,l=n=n||l),i.cover?(o(),a()):(a(),o())),S){if(f=i.pixelRatio,f>1&&(p.style.width=y+"px",p.style.height=v+"px",y*=f,v*=f,p.getContext("2d").scale(f,f)),h=i.downsamplingRatio,h>0&&1>h&&d>y&&u>v)for(;d*h>y;)p.width=d*h,p.height=u*h,t.renderImageToCanvas(p,e,c,g,d,u,0,0,p.width,p.height),d=p.width,u=p.height,e=document.createElement("canvas"),e.width=d,e.height=u,t.renderImageToCanvas(e,p,0,0,d,u,0,0,d,u);return p.width=y,p.height=v,t.transformCoordinates(p,i),t.renderImageToCanvas(p,e,c,g,d,u,0,0,y,v)}return e.width=y,e.height=v,e},t.createObjectURL=function(e){return i?i.createObjectURL(e):!1},t.revokeObjectURL=function(e){return i?i.revokeObjectURL(e):!1},t.readFile=function(e,t,i){if(window.FileReader){var a=new FileReader;if(a.onload=a.onerror=t,i=i||"readAsDataURL",a[i])return a[i](e),a}return!1},"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:e.loadImage=t}(window),function(e){"use strict";"function"==typeof define&&define.amd?define(["./load-image"],e):e("object"==typeof module&&module.exports?require("./load-image"):window.loadImage)}(function(e){"use strict";var t=e.hasCanvasOption,i=e.transformCoordinates,a=e.getTransformedOptions;e.hasCanvasOption=function(i){return!!i.orientation||t.call(e,i)},e.transformCoordinates=function(t,a){i.call(e,t,a);var o=t.getContext("2d"),r=t.width,n=t.height,s=t.style.width,l=t.style.height,d=a.orientation;if(d&&!(d>8))switch(d>4&&(t.width=n,t.height=r,t.style.width=l,t.style.height=s),d){case 2:o.translate(r,0),o.scale(-1,1);break;case 3:o.translate(r,n),o.rotate(Math.PI);break;case 4:o.translate(0,n),o.scale(1,-1);break;case 5:o.rotate(.5*Math.PI),o.scale(1,-1);break;case 6:o.rotate(.5*Math.PI),o.translate(0,-n);break;case 7:o.rotate(.5*Math.PI),o.translate(r,-n),o.scale(-1,1);break;case 8:o.rotate(-.5*Math.PI),o.translate(-r,0)}},e.getTransformedOptions=function(t,i){var o,r,n=a.call(e,t,i),s=n.orientation;if(!s||s>8||1===s)return n;o={};for(r in n)n.hasOwnProperty(r)&&(o[r]=n[r]);switch(n.orientation){case 2:o.left=n.right,o.right=n.left;break;case 3:o.left=n.right,o.top=n.bottom,o.right=n.left,o.bottom=n.top;break;case 4:o.top=n.bottom,o.bottom=n.top;break;case 5:o.left=n.top,o.top=n.left,o.right=n.bottom,o.bottom=n.right;break;case 6:o.left=n.top,o.top=n.right,o.right=n.bottom,o.bottom=n.left;break;case 7:o.left=n.bottom,o.top=n.right,o.right=n.top,o.bottom=n.left;break;case 8:o.left=n.bottom,o.top=n.left,o.right=n.top,o.bottom=n.right}return n.orientation>4&&(o.maxWidth=n.maxHeight,o.maxHeight=n.maxWidth,o.minWidth=n.minHeight,o.minHeight=n.minWidth,o.sourceWidth=n.sourceHeight,o.sourceHeight=n.sourceWidth),o}}),function(e){"use strict";"function"==typeof define&&define.amd?define(["./load-image"],e):e("object"==typeof module&&module.exports?require("./load-image"):window.loadImage)}(function(e){"use strict";var t=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice);e.blobSlice=t&&function(){var e=this.slice||this.webkitSlice||this.mozSlice;return e.apply(this,arguments)},e.metaDataParsers={jpeg:{65505:[]}},e.parseMetaData=function(t,i,a){a=a||{};var o=this,r=a.maxMetaDataSize||262144,n={},s=!(window.DataView&&t&&t.size>=12&&"image/jpeg"===t.type&&e.blobSlice);(s||!e.readFile(e.blobSlice.call(t,0,r),function(t){if(t.target.error)return console.log(t.target.error),void i(n);var r,s,l,d,u=t.target.result,c=new DataView(u),g=2,f=c.byteLength-4,h=g;if(65496===c.getUint16(0)){for(;f>g&&(r=c.getUint16(g),r>=65504&&65519>=r||65534===r);){if(s=c.getUint16(g+2)+2,g+s>c.byteLength){console.log("Invalid meta data: Invalid segment size.");break}if(l=e.metaDataParsers.jpeg[r])for(d=0;d6&&(u.slice?n.imageHead=u.slice(0,h):n.imageHead=new Uint8Array(u).subarray(0,h))}else console.log("Invalid JPEG file: Missing JPEG marker.");i(n)},"readAsArrayBuffer"))&&i(n)}}),function(e){"use strict";"function"==typeof define&&define.amd?define(["./load-image","./load-image-meta"],e):"object"==typeof module&&module.exports?e(require("./load-image"),require("./load-image-meta")):e(window.loadImage)}(function(e){"use strict";e.ExifMap=function(){return this},e.ExifMap.prototype.map={Orientation:274},e.ExifMap.prototype.get=function(e){return this[e]||this[this.map[e]]},e.getExifThumbnail=function(e,t,i){var a,o,r;if(!i||t+i>e.byteLength)return void console.log("Invalid Exif data: Invalid thumbnail data.");for(a=[],o=0;i>o;o+=1)r=e.getUint8(t+o),a.push((16>r?"0":"")+r.toString(16));return"data:image/jpeg,%"+a.join("%")},e.exifTagTypes={1:{getValue:function(e,t){return e.getUint8(t)},size:1},2:{getValue:function(e,t){return String.fromCharCode(e.getUint8(t))},size:1,ascii:!0},3:{getValue:function(e,t,i){return e.getUint16(t,i)},size:2},4:{getValue:function(e,t,i){return e.getUint32(t,i)},size:4},5:{getValue:function(e,t,i){return e.getUint32(t,i)/e.getUint32(t+4,i)},size:8},9:{getValue:function(e,t,i){return e.getInt32(t,i)},size:4},10:{getValue:function(e,t,i){return e.getInt32(t,i)/e.getInt32(t+4,i)},size:8}},e.exifTagTypes[7]=e.exifTagTypes[1],e.getExifValue=function(t,i,a,o,r,n){var s,l,d,u,c,g,f=e.exifTagTypes[o];if(!f)return void console.log("Invalid Exif data: Invalid tag type.");if(s=f.size*r,l=s>4?i+t.getUint32(a+8,n):a+8,l+s>t.byteLength)return void console.log("Invalid Exif data: Invalid data offset.");if(1===r)return f.getValue(t,l,n);for(d=[],u=0;r>u;u+=1)d[u]=f.getValue(t,l+u*f.size,n);if(f.ascii){for(c="",u=0;ue.byteLength)return void console.log("Invalid Exif data: Invalid directory offset.");if(r=e.getUint16(i,a),n=i+2+12*r,n+4>e.byteLength)return void console.log("Invalid Exif data: Invalid directory size.");for(s=0;r>s;s+=1)this.parseExifTag(e,t,i+2+12*s,a,o);return e.getUint32(n,a)},e.parseExifData=function(t,i,a,o,r){if(!r.disableExif){var n,s,l,d=i+10;if(1165519206===t.getUint32(i+4)){if(d+8>t.byteLength)return void console.log("Invalid Exif data: Invalid segment size.");if(0!==t.getUint16(i+8))return void console.log("Invalid Exif data: Missing byte alignment offset.");switch(t.getUint16(d)){case 18761:n=!0;break;case 19789:n=!1;break;default:return void console.log("Invalid Exif data: Invalid byte alignment marker.")}if(42!==t.getUint16(d+2,n))return void console.log("Invalid Exif data: Missing TIFF marker.");s=t.getUint32(d+4,n),o.exif=new e.ExifMap,s=e.parseExifTags(t,d,d+s,n,o),s&&!r.disableExifThumbnail&&(l={exif:{}},s=e.parseExifTags(t,d,d+s,n,l),l.exif[513]&&(o.exif.Thumbnail=e.getExifThumbnail(t,d+l.exif[513],l.exif[514]))),o.exif[34665]&&!r.disableExifSub&&e.parseExifTags(t,d,d+o.exif[34665],n,o),o.exif[34853]&&!r.disableExifGps&&e.parseExifTags(t,d,d+o.exif[34853],n,o)}}},e.metaDataParsers.jpeg[65505].push(e.parseExifData)}),function(e){"use strict";"function"==typeof define&&define.amd?define(["./load-image","./load-image-exif"],e):"object"==typeof module&&module.exports?e(require("./load-image"),require("./load-image-exif")):e(window.loadImage)}(function(e){"use strict";e.ExifMap.prototype.tags={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",36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",42240:"Gamma",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:"PhotographicSensitivity",34856:"OECF",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",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:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"CameraOwnerName",42033:"BodySerialNumber",42034:"LensSpecification",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",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",31:"GPSHPositioningError"},e.ExifMap.prototype.stringValues={ExposureProgram:{0:"Undefined",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:"Undefined",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"},ComponentsConfiguration:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"},Orientation:{1:"top-left",2:"top-right",3:"bottom-right",4:"bottom-left",5:"left-top",6:"right-top",7:"right-bottom",8:"left-bottom"}},e.ExifMap.prototype.getText=function(e){var t=this.get(e);switch(e){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":case"Orientation":return this.stringValues[e][t];case"ExifVersion":case"FlashpixVersion":return String.fromCharCode(t[0],t[1],t[2],t[3]);case"ComponentsConfiguration":return this.stringValues[e][t[0]]+this.stringValues[e][t[1]]+this.stringValues[e][t[2]]+this.stringValues[e][t[3]];case"GPSVersionID":return t[0]+"."+t[1]+"."+t[2]+"."+t[3]}return String(t)},function(e){var t,i=e.tags,a=e.map;for(t in i)i.hasOwnProperty(t)&&(a[i[t]]=t)}(e.ExifMap.prototype),e.ExifMap.prototype.getAll=function(){var e,t,i={};for(e in this)this.hasOwnProperty(e)&&(t=this.tags[e],t&&(i[t]=this.getText(t)));return i}}); //# sourceMappingURL=load-image.all.min.js.map \ No newline at end of file diff --git a/js/load-image.all.min.js.map b/js/load-image.all.min.js.map index 9df1eab..0bbb4e8 100644 --- a/js/load-image.all.min.js.map +++ b/js/load-image.all.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["load-image.js","load-image-orientation.js","load-image-meta.js","load-image-exif.js","load-image-exif-map.js"],"names":["$","loadImage","file","callback","options","url","oUrl","img","document","createElement","onerror","onload","noRevoke","revokeObjectURL","scale","isInstanceOf","createObjectURL","_type","type","crossOrigin","src","readFile","e","target","result","urlAPI","window","URL","webkitURL","obj","Object","prototype","toString","call","transformCoordinates","getTransformedOptions","newOptions","i","width","height","aspectRatio","hasOwnProperty","crop","naturalWidth","naturalHeight","maxWidth","maxHeight","renderImageToCanvas","canvas","sourceX","sourceY","sourceWidth","sourceHeight","destX","destY","destWidth","destHeight","getContext","drawImage","hasCanvasOption","scaleUp","Math","max","minWidth","minHeight","scaleDown","min","pixelRatio","downsamplingRatio","tmp","useCanvas","left","top","undefined","right","bottom","contain","cover","style","method","FileReader","fileReader","define","amd","module","exports","factory","require","originalHasCanvasOption","originalTransformCoordinates","originalGetTransformedOptions","orientation","ctx","styleWidth","styleHeight","translate","rotate","PI","opts","hasblobSlice","Blob","slice","webkitSlice","mozSlice","blobSlice","this","apply","arguments","metaDataParsers","jpeg",65505,"parseMetaData","that","maxMetaDataSize","data","noMetaData","DataView","size","error","console","log","markerBytes","markerLength","parsers","buffer","dataView","offset","maxOffset","byteLength","headLength","getUint16","length","disableImageHead","imageHead","Uint8Array","subarray","ExifMap","map","Orientation","get","id","getExifThumbnail","hexData","b","getUint8","push","join","exifTagTypes",1,"getValue","dataOffset",2,"String","fromCharCode","ascii",3,"littleEndian",4,"getUint32",5,9,"getInt32",10,"getExifValue","tiffOffset","tagSize","values","str","c","tagType","parseExifTag","tag","exif","parseExifTags","dirOffset","tagsNumber","dirEndOffset","parseExifData","disableExif","thumbnailData","disableExifThumbnail","Thumbnail","disableExifSub","disableExifGps","tags",256,257,34665,34853,40965,258,259,262,274,277,284,530,531,282,283,296,273,278,279,513,514,301,318,319,529,532,306,270,271,272,305,315,33432,36864,40960,40961,40962,40963,42240,37121,37122,37500,37510,40964,36867,36868,37520,37521,37522,33434,33437,34850,34852,34855,34856,34864,34865,34866,34867,34868,34869,37377,37378,37379,37380,37381,37382,37383,37384,37385,37396,37386,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,42032,42033,42034,42035,42036,42037,0,6,7,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,"stringValues","ExposureProgram","MeteringMode",255,"LightSource","Flash",32,65,69,71,73,77,79,89,93,95,"SensingMethod","SceneCaptureType","SceneType","CustomRendered","WhiteBalance","GainControl","Contrast","Saturation","Sharpness","SubjectDistanceRange","FileSource","ComponentsConfiguration","getText","value","exifMapPrototype","prop","getAll"],"mappings":"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","file":"load-image.all.min.js"} \ No newline at end of file +{"version":3,"sources":["load-image.js","load-image-orientation.js","load-image-meta.js","load-image-exif.js","load-image-exif-map.js"],"names":["$","loadImage","file","callback","options","url","oUrl","img","document","createElement","onerror","onload","noRevoke","revokeObjectURL","scale","isInstanceOf","createObjectURL","_type","type","crossOrigin","src","readFile","e","target","result","urlAPI","window","URL","webkitURL","obj","Object","prototype","toString","call","transformCoordinates","getTransformedOptions","newOptions","i","width","height","aspectRatio","hasOwnProperty","crop","naturalWidth","naturalHeight","maxWidth","maxHeight","renderImageToCanvas","canvas","sourceX","sourceY","sourceWidth","sourceHeight","destX","destY","destWidth","destHeight","getContext","drawImage","hasCanvasOption","scaleUp","Math","max","minWidth","minHeight","scaleDown","min","pixelRatio","downsamplingRatio","tmp","useCanvas","left","top","undefined","right","bottom","contain","cover","style","method","FileReader","fileReader","define","amd","module","exports","factory","require","originalHasCanvasOption","originalTransformCoordinates","originalGetTransformedOptions","orientation","ctx","styleWidth","styleHeight","translate","rotate","PI","opts","hasblobSlice","Blob","slice","webkitSlice","mozSlice","blobSlice","this","apply","arguments","metaDataParsers","jpeg",65505,"parseMetaData","that","maxMetaDataSize","data","noMetaData","DataView","size","error","console","log","markerBytes","markerLength","parsers","buffer","dataView","offset","maxOffset","byteLength","headLength","getUint16","length","disableImageHead","imageHead","Uint8Array","subarray","ExifMap","map","Orientation","get","id","getExifThumbnail","hexData","b","getUint8","push","join","exifTagTypes",1,"getValue","dataOffset",2,"String","fromCharCode","ascii",3,"littleEndian",4,"getUint32",5,9,"getInt32",10,"getExifValue","tiffOffset","tagSize","values","str","c","tagType","parseExifTag","tag","exif","parseExifTags","dirOffset","tagsNumber","dirEndOffset","parseExifData","disableExif","thumbnailData","disableExifThumbnail","Thumbnail","disableExifSub","disableExifGps","tags",256,257,34665,34853,40965,258,259,262,274,277,284,530,531,282,283,296,273,278,279,513,514,301,318,319,529,532,306,270,271,272,305,315,33432,36864,40960,40961,40962,40963,42240,37121,37122,37500,37510,40964,36867,36868,37520,37521,37522,33434,33437,34850,34852,34855,34856,34864,34865,34866,34867,34868,34869,37377,37378,37379,37380,37381,37382,37383,37384,37385,37396,37386,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,42032,42033,42034,42035,42036,42037,0,6,7,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,"stringValues","ExposureProgram","MeteringMode",255,"LightSource","Flash",32,65,69,71,73,77,79,89,93,95,"SensingMethod","SceneCaptureType","SceneType","CustomRendered","WhiteBalance","GainControl","Contrast","Saturation","Sharpness","SubjectDistanceRange","FileSource","ComponentsConfiguration","getText","value","exifMapPrototype","prop","getAll"],"mappings":"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","file":"load-image.all.min.js"} \ No newline at end of file diff --git a/package.json b/package.json index c4685d0..6af4e80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blueimp-load-image", - "version": "2.6.0", + "version": "2.6.1", "main": "index.js", "title": "JavaScript Load Image", "description": "JavaScript Load Image is a library to load images provided as File or Blob objects or via URL. It returns an optionally scaled and/or cropped HTML img or canvas element. It also provides a method to parse image meta data to extract Exif tags and thumbnails and to restore the complete image header after resizing.", From 29138cefdc45ba9534a8087d51521df9e39fc3e1 Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Thu, 7 Jul 2016 16:16:55 -0400 Subject: [PATCH 04/12] Start of XMP reading. --- js/load-image-xmp.js | 47 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 +++-- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 js/load-image-xmp.js diff --git a/js/load-image-xmp.js b/js/load-image-xmp.js new file mode 100644 index 0000000..601c1ec --- /dev/null +++ b/js/load-image-xmp.js @@ -0,0 +1,47 @@ +; (function (factory) { + 'use strict' + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['./load-image', './load-image-meta'], factory) + } else if (typeof module === 'object' && module.exports) { + factory(require('./load-image'), require('./load-image-meta')) + } else { + // Browser globals: + factory(window.loadImage) + } +} (function (loadImage) { + 'use strict' + + loadImage.parseXmpData = function (dataView, offset, length, data, options) { + if (options.disableExif) { + return; + } + + // Check for the ASCII code for "http" (0x68747470). Note that the actual XMP identifier is quite long: "http://ns.adobe.com/xap/1.0//x00" + var arrIdentifier = []; + var offsetNamespace = 4; + var lengthNamespace = 29; + for (var i = 0; i < lengthNamespace; i++) { + arrIdentifier[i] = String.fromCharCode(dataView.getInt8(offset + offsetNamespace + i)); + } + + var identifier = arrIdentifier.join(""); + if (identifier !== "http://ns.adobe.com/xap/1.0//0") { + // No XMP data. + return; + } + + var offsetLp = 2; // Offset to the packet length field. + var xmpLength = dataView.getUint16(offset + offsetLp); + + var lengthLp = 2; + xmpLength -= (lengthLp + lengthNamespace); // The packet length is a little misleading it includes the length of Lp and Namespace, remove those two to get the actual packet length. + + var maxPacketLength = 65503; + if (maxPacketLength < xmpLength){ + return; + } + } + + loadImage.metaDataParsers.jpeg[0xffe1].push(loadImage.parseXmpData); +})) \ No newline at end of file diff --git a/package.json b/package.json index 6af4e80..51af4f8 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "meta", "exif", "thumbnail", - "resizing" + "resizing", + "xmp" ], "homepage": "https://github.com/blueimp/JavaScript-Load-Image", "author": { @@ -37,7 +38,7 @@ }, "scripts": { "test": "standard *.js js/*.js test/*.js && mocha-phantomjs test/index.html", - "build": "cd js && uglifyjs load-image.js load-image-orientation.js load-image-meta.js load-image-exif.js load-image-exif-map.js -c -m -o load-image.all.min.js --source-map load-image.all.min.js.map", + "build": "cd js && uglifyjs load-image.js load-image-orientation.js load-image-meta.js load-image-exif.js load-image-exif-map.js load-image-xmp.js -c -m -o load-image.all.min.js --source-map load-image.all.min.js.map", "preversion": "npm test", "version": "npm run build && git add -A js", "postversion": "git push --tags origin master master:gh-pages && npm publish" From 9b66f791efb099cb4e1fd460bc8f5f5c021ee379 Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Fri, 8 Jul 2016 17:01:17 -0400 Subject: [PATCH 05/12] Though mapping is not really needed added a getAll() function for compatibility. --- js/load-image-xmp-map.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 js/load-image-xmp-map.js diff --git a/js/load-image-xmp-map.js b/js/load-image-xmp-map.js new file mode 100644 index 0000000..65a4550 --- /dev/null +++ b/js/load-image-xmp-map.js @@ -0,0 +1,27 @@ +;(function (factory) { + 'use strict' + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['./load-image', './load-image-exif'], factory) + } else if (typeof module === 'object' && module.exports) { + factory(require('./load-image'), require('./load-image-exif')) + } else { + // Browser globals: + factory(window.loadImage) + } +}(function (loadImage) { + 'use strict' + + loadImage.XmpMap.prototype.getAll = function () { + var map = {}; + var prop; + var id; + for (prop in this) { + if (this.hasOwnProperty(prop)) { + map[prop] = this[prop]; + } + } + return map; + }; + +})); From c26dd62a8e31e047f4ce8bee90622540828db2df Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Fri, 8 Jul 2016 17:01:42 -0400 Subject: [PATCH 06/12] Update to convert the XML into name value pairs. --- js/load-image-xmp.js | 71 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/js/load-image-xmp.js b/js/load-image-xmp.js index 601c1ec..4f9a53e 100644 --- a/js/load-image-xmp.js +++ b/js/load-image-xmp.js @@ -12,35 +12,92 @@ } (function (loadImage) { 'use strict' + loadImage.XmpMap = function () { + return this + }; + + loadImage.XmpMap.prototype.get = function (id) { + return this[id]; + } + loadImage.parseXmpData = function (dataView, offset, length, data, options) { if (options.disableExif) { return; } // Check for the ASCII code for "http" (0x68747470). Note that the actual XMP identifier is quite long: "http://ns.adobe.com/xap/1.0//x00" - var arrIdentifier = []; var offsetNamespace = 4; var lengthNamespace = 29; + var arrNamespace = []; for (var i = 0; i < lengthNamespace; i++) { - arrIdentifier[i] = String.fromCharCode(dataView.getInt8(offset + offsetNamespace + i)); + arrNamespace.push(String.fromCharCode(dataView.getUint8(offset + offsetNamespace + i))); } - var identifier = arrIdentifier.join(""); - if (identifier !== "http://ns.adobe.com/xap/1.0//0") { + var namespace = arrNamespace.join(""); + if (namespace !== "http://ns.adobe.com/xap/1.0//0") { // No XMP data. return; } var offsetLp = 2; // Offset to the packet length field. - var xmpLength = dataView.getUint16(offset + offsetLp); + var packetLength = dataView.getUint16(offset + offsetLp); var lengthLp = 2; - xmpLength -= (lengthLp + lengthNamespace); // The packet length is a little misleading it includes the length of Lp and Namespace, remove those two to get the actual packet length. + packetLength -= (lengthLp + lengthNamespace); // The packet length is a little misleading it includes the length of Lp and Namespace, remove those two to get the actual packet length. var maxPacketLength = 65503; - if (maxPacketLength < xmpLength){ + if (maxPacketLength < packetLength) { + // The length of the packet is not valid. Note that XMP does allow multiple packets but they are unlikely and NOT currently supported + return; + } + + // According to Adobe's document + // (http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart3.pdf) + // an EXIF encoding of XMP will always be UTF-8. No need to check for + // bytes per character or endianness. + + // Find the start of packet data. + var offsetPacket = offsetNamespace + lengthNamespace; + var arrPacketData = []; + for (var j = 0; j < packetLength; j++) { + arrPacketData.push(String.fromCharCode(dataView.getUint8(offset + offsetPacket + j))); + } + var xml = arrPacketData.join(""); + + data.xmp = new loadImage.XmpMap(); + + // Create an XMLDocument and extract the attributes from the + // Description element. + var xmlDocument = new DOMParser().parseFromString(xml, "application/xml"); + + var document = xmlDocument.documentElement; + if (!document) { + return; + } + + var xpath = "/*[namespace-uri()='adobe:ns:meta/' and local-name()='xmpmeta']/*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='RDF']/*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='Description']"; + var xpathResult; + try { + xpathResult = xmlDocument.evaluate(xpath, document, xmlDocument.createNSResolver(document), XPathResult.FIRST_ORDERED_NODE_TYPE, null); + } catch (err) { + console.log("Error selecting Description node: '" + err.message || JSON.stringify(err) + "'."); + } + + if (!xpathResult) { return; } + + if (xpathResult.resultType !== XPathResult.FIRST_ORDERED_NODE_TYPE) { + console.log("xpathResult type " + xpathResult.resultType + " is not supported."); + return; + } + + var node = xpathResult.singleNodeValue; + var attr; + for (var k = 0; k < node.attributes.length; k++) { + attr = node.attributes[k]; + data.xmp[attr.localName] = attr.value; + } } loadImage.metaDataParsers.jpeg[0xffe1].push(loadImage.parseXmpData); From 801f82e9a9427fce0ff1b55de9d81d66dee945c1 Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Fri, 8 Jul 2016 17:09:10 -0400 Subject: [PATCH 07/12] Get raw XML. Skip namespace definitions in Description. --- js/load-image-xmp.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/js/load-image-xmp.js b/js/load-image-xmp.js index 4f9a53e..753ccc6 100644 --- a/js/load-image-xmp.js +++ b/js/load-image-xmp.js @@ -64,6 +64,10 @@ } var xml = arrPacketData.join(""); + loadImage.XmpMap.prototype.getXml = function (id) { + return xml; + } + data.xmp = new loadImage.XmpMap(); // Create an XMLDocument and extract the attributes from the @@ -96,6 +100,12 @@ var attr; for (var k = 0; k < node.attributes.length; k++) { attr = node.attributes[k]; + + // Don't include namespace definitions. + if (attr.prefix === "xmlns"){ + continue; + } + data.xmp[attr.localName] = attr.value; } } From 262491eba5f99d3aa60893cf714960422af863c5 Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Mon, 11 Jul 2016 10:17:34 -0400 Subject: [PATCH 08/12] Formatting like the exif files. --- js/load-image-xmp-map.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/load-image-xmp-map.js b/js/load-image-xmp-map.js index 65a4550..064612d 100644 --- a/js/load-image-xmp-map.js +++ b/js/load-image-xmp-map.js @@ -18,10 +18,10 @@ var id; for (prop in this) { if (this.hasOwnProperty(prop)) { - map[prop] = this[prop]; + map[prop] = this[prop]; } } - return map; + return map }; })); From f73b94d3e45251f480628f828a4eee9adf77b62e Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Mon, 11 Jul 2016 10:18:05 -0400 Subject: [PATCH 09/12] Read both attribute and child node properties. Formatting fixes. --- js/load-image-xmp.js | 203 ++++++++++++++++++++++++------------------- 1 file changed, 114 insertions(+), 89 deletions(-) diff --git a/js/load-image-xmp.js b/js/load-image-xmp.js index 753ccc6..5a9e2c3 100644 --- a/js/load-image-xmp.js +++ b/js/load-image-xmp.js @@ -1,114 +1,139 @@ -; (function (factory) { - 'use strict' - if (typeof define === 'function' && define.amd) { - // Register as an anonymous AMD module: - define(['./load-image', './load-image-meta'], factory) - } else if (typeof module === 'object' && module.exports) { - factory(require('./load-image'), require('./load-image-meta')) - } else { - // Browser globals: - factory(window.loadImage) +;(function (factory) { + 'use strict' + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['./load-image', './load-image-meta'], factory) + } else if (typeof module === 'object' && module.exports) { + factory(require('./load-image'), require('./load-image-meta')) + } else { + // Browser globals: + factory(window.loadImage) + } +}(function (loadImage) { + 'use strict' + + loadImage.XmpMap = function () { + return this + }; + + loadImage.XmpMap.prototype.get = function (id) { + return this[id] + } + + loadImage.parseXmpData = function (dataView, offset, length, data, options) { + if (options.disableExif) { + return } -} (function (loadImage) { - 'use strict' - loadImage.XmpMap = function () { - return this - }; + // Check for the ASCII code for 'http' (0x68747470). Note that the actual + // XMP identifier is quite long: 'http://ns.adobe.com/xap/1.0//x00' + var offsetNamespace = 4; + var lengthNamespace = 29; + var arrNamespace = []; + for (var i = 0; i < lengthNamespace; i++) { + arrNamespace.push(String.fromCharCode(dataView.getUint8(offset + offsetNamespace + i))); + } - loadImage.XmpMap.prototype.get = function (id) { - return this[id]; + var namespace = arrNamespace.join(''); + if (namespace !== 'http://ns.adobe.com/xap/1.0//0') { + // No XMP data. + return } - loadImage.parseXmpData = function (dataView, offset, length, data, options) { - if (options.disableExif) { - return; - } + var offsetLp = 2; // Offset to the packet length field. + var packetLength = dataView.getUint16(offset + offsetLp); - // Check for the ASCII code for "http" (0x68747470). Note that the actual XMP identifier is quite long: "http://ns.adobe.com/xap/1.0//x00" - var offsetNamespace = 4; - var lengthNamespace = 29; - var arrNamespace = []; - for (var i = 0; i < lengthNamespace; i++) { - arrNamespace.push(String.fromCharCode(dataView.getUint8(offset + offsetNamespace + i))); - } + var lengthLp = 2; + packetLength -= (lengthLp + lengthNamespace); // The packet length is a little misleading it includes the length of Lp and Namespace, remove those two to get the actual packet length. - var namespace = arrNamespace.join(""); - if (namespace !== "http://ns.adobe.com/xap/1.0//0") { - // No XMP data. - return; - } + var maxPacketLength = 65503; + if (maxPacketLength < packetLength) { + // The length of the packet is not valid. Note that XMP does allow + // multiple packets but they are unlikely and NOT currently supported here. + return + } - var offsetLp = 2; // Offset to the packet length field. - var packetLength = dataView.getUint16(offset + offsetLp); + // According to Adobe's document + // (http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart3.pdf) + // an EXIF encoding of XMP will always be UTF-8. No need to check for + // bytes per character or endianness. - var lengthLp = 2; - packetLength -= (lengthLp + lengthNamespace); // The packet length is a little misleading it includes the length of Lp and Namespace, remove those two to get the actual packet length. + // Find the start of packet data. + var offsetPacket = offsetNamespace + lengthNamespace; + var arrPacketData = []; + for (var j = 0; j < packetLength; j++) { + arrPacketData.push(String.fromCharCode(dataView.getUint8(offset + offsetPacket + j))); + } + var xml = arrPacketData.join(''); - var maxPacketLength = 65503; - if (maxPacketLength < packetLength) { - // The length of the packet is not valid. Note that XMP does allow multiple packets but they are unlikely and NOT currently supported - return; - } + loadImage.XmpMap.prototype.getXml = function (id) { + return xml + } - // According to Adobe's document - // (http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart3.pdf) - // an EXIF encoding of XMP will always be UTF-8. No need to check for - // bytes per character or endianness. + data.xmp = new loadImage.XmpMap(); - // Find the start of packet data. - var offsetPacket = offsetNamespace + lengthNamespace; - var arrPacketData = []; - for (var j = 0; j < packetLength; j++) { - arrPacketData.push(String.fromCharCode(dataView.getUint8(offset + offsetPacket + j))); - } - var xml = arrPacketData.join(""); + // Create an XMLDocument and extract the attributes from the + // Description element. + var xmlDocument = new DOMParser().parseFromString(xml, 'application/xml'); - loadImage.XmpMap.prototype.getXml = function (id) { - return xml; - } + var document = xmlDocument.documentElement; + if (!document) { + return + } - data.xmp = new loadImage.XmpMap(); + var xpath = "/*[namespace-uri()='adobe:ns:meta/' and local-name()='xmpmeta']/*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='RDF']//*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='Description']"; + var xpathResult; + try { + xpathResult = xmlDocument.evaluate(xpath, document, xmlDocument.createNSResolver(document), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); + } catch (err) { + console.log("Error selecting Description node: '" + err.message || JSON.stringify(err) + "'."); + } - // Create an XMLDocument and extract the attributes from the - // Description element. - var xmlDocument = new DOMParser().parseFromString(xml, "application/xml"); + if (!xpathResult) { + return + } - var document = xmlDocument.documentElement; - if (!document) { - return; - } + if (xpathResult.resultType !== XPathResult.ORDERED_NODE_ITERATOR_TYPE) { + console.log('xpathResult type ' + xpathResult.resultType + ' is not supported.'); + return + } - var xpath = "/*[namespace-uri()='adobe:ns:meta/' and local-name()='xmpmeta']/*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='RDF']/*[namespace-uri()='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and local-name()='Description']"; - var xpathResult; - try { - xpathResult = xmlDocument.evaluate(xpath, document, xmlDocument.createNSResolver(document), XPathResult.FIRST_ORDERED_NODE_TYPE, null); - } catch (err) { - console.log("Error selecting Description node: '" + err.message || JSON.stringify(err) + "'."); + // There can be multiple Description nodes. + var node = xpathResult.iterateNext(); + var attr; + while (node) { + // The description node can have the XMP information stored as attributes + // of the node (if they are "simple"") or as child nodes. Get the + // attributes. + // http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf + for (var k = 0; k < node.attributes.length; k++) { + attr = node.attributes[k]; + + // Don't include namespace definitions. + if (attr.prefix === 'xmlns' || attr.localName === "about") { + continue } - if (!xpathResult) { - return; - } + data.xmp[attr.localName] = attr.value; + } - if (xpathResult.resultType !== XPathResult.FIRST_ORDERED_NODE_TYPE) { - console.log("xpathResult type " + xpathResult.resultType + " is not supported."); - return; - } + // Check for properties stored as child nodes. + var childNode; + for (var m = 0; m < node.children.length; m++) { + childNode = node.children[m]; - var node = xpathResult.singleNodeValue; - var attr; - for (var k = 0; k < node.attributes.length; k++) { - attr = node.attributes[k]; + // If the Description child has its own children the child is a + // "complex" property and it will be ignored. + if (childNode.children) { + continue; + } - // Don't include namespace definitions. - if (attr.prefix === "xmlns"){ - continue; - } + data.xmp[childNode.localName] = childNode.textContent; + } - data.xmp[attr.localName] = attr.value; - } + node = xpathResult.iterateNext(); } + } - loadImage.metaDataParsers.jpeg[0xffe1].push(loadImage.parseXmpData); -})) \ No newline at end of file + loadImage.metaDataParsers.jpeg[0xffe1].push(loadImage.parseXmpData); +})) From 287993396b88e9a703929b1c1874e6014d967d2a Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Mon, 11 Jul 2016 10:25:27 -0400 Subject: [PATCH 10/12] Just check length of children. --- js/load-image-xmp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/load-image-xmp.js b/js/load-image-xmp.js index 5a9e2c3..ae73000 100644 --- a/js/load-image-xmp.js +++ b/js/load-image-xmp.js @@ -124,7 +124,7 @@ // If the Description child has its own children the child is a // "complex" property and it will be ignored. - if (childNode.children) { + if (0 < childNode.children.length) { continue; } From 23b0be7ad1c7650287acc75e704d8e0b2201300d Mon Sep 17 00:00:00 2001 From: Rich McNeary Date: Mon, 11 Jul 2016 10:25:39 -0400 Subject: [PATCH 11/12] Include XMP files. --- test/index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/index.html b/test/index.html index 6854699..27657d9 100644 --- a/test/index.html +++ b/test/index.html @@ -35,6 +35,8 @@ + +