aboutsummaryrefslogtreecommitdiffstats
path: root/web/js/src
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-07-06 19:53:50 +0200
committerMarius Halden <marius.h@lden.org>2016-07-06 19:53:50 +0200
commit02edc2af388e8e77c6da876bcec3633ea9161083 (patch)
tree59e65ccfc88c0795476db7ae709013862c7161c3 /web/js/src
parent2cf7f0dcf146143613beb102d0dd227238776b69 (diff)
parent26ef9e161e7ca4bbcf6bcbddb1ba4f215bc349ec (diff)
Oppgrader til 1.8.4fiksgatami-prod-1.8
Merge branch 'fiksgatami-dev' into fiksgatami-prod
Diffstat (limited to 'web/js/src')
-rw-r--r--web/js/src/exif.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/web/js/src/exif.js b/web/js/src/exif.js
new file mode 100644
index 000000000..3a2c7e1c3
--- /dev/null
+++ b/web/js/src/exif.js
@@ -0,0 +1,94 @@
+/* Cut down version of https://github.com/exif-js/exif-js
+ * only looking for orientation EXIF data. MIT. */
+
+(function() {
+ var EXIF = {};
+ window.EXIF = EXIF;
+
+ function readEXIFData(file, start) {
+ var str = "";
+ for (var n = start; n < start+4; n++) {
+ str += String.fromCharCode(file.getUint8(n));
+ }
+ if (str != "Exif") {
+ return false;
+ }
+
+ var bigEnd,
+ tiffOffset = start + 6;
+
+ // test for TIFF validity and endianness
+ if (file.getUint16(tiffOffset) == 0x4949) {
+ bigEnd = false;
+ } else if (file.getUint16(tiffOffset) == 0x4D4D) {
+ bigEnd = true;
+ } else {
+ return false;
+ }
+
+ if (file.getUint16(tiffOffset+2, !bigEnd) != 0x002A) {
+ return false;
+ }
+
+ var firstIFDOffset = file.getUint32(tiffOffset+4, !bigEnd);
+ if (firstIFDOffset < 0x00000008) {
+ return false;
+ }
+
+ var dirStart = tiffOffset + firstIFDOffset,
+ entries = file.getUint16(dirStart, !bigEnd),
+ tags = {},
+ entryOffset,
+ i;
+
+ for (i=0;i<entries;i++) {
+ entryOffset = dirStart + i*12 + 2;
+ if (file.getUint16(entryOffset, !bigEnd) == 0x0112) {
+ return parseInt(file.getUint16(entryOffset + 8, !bigEnd), 10);
+ }
+ }
+ return false;
+ }
+
+ EXIF.getData = function(img) {
+ if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) {
+ return false;
+ }
+
+ var base64 = img.src.replace(/^data\:([^\;]+)\;base64,/gmi, '');
+ var binary = atob(base64);
+ var len = binary.length;
+ var file = new ArrayBuffer(len);
+ var view = new Uint8Array(file);
+ for (var i = 0; i < len; i++) {
+ view[i] = binary.charCodeAt(i);
+ }
+
+ var dataView = new DataView(file);
+ if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) {
+ return false; // not a valid jpeg
+ }
+
+ var offset = 2,
+ length = file.byteLength,
+ marker;
+
+ while (offset < length) {
+ if (dataView.getUint8(offset) != 0xFF) {
+ return false; // not a valid marker, something is wrong
+ }
+
+ marker = dataView.getUint8(offset + 1);
+
+ // we could implement handling for other markers here,
+ // but we're only looking for 0xFFE1 for EXIF data
+ if (marker == 225) {
+ return readEXIFData(dataView, offset + 4);
+ // offset += 2 + file.getShortAt(offset+2, true);
+ } else {
+ offset += 2 + dataView.getUint16(offset+2);
+ }
+ }
+ };
+
+})();