(function(k, m, l, g) {
|
var d = {}, j;
|
function c(s) {
|
var r = s.naturalWidth, u = s.naturalHeight;
|
if (r * u > 1024 * 1024) {
|
var t = m.createElement("canvas");
|
t.width = t.height = 1;
|
var q = t.getContext("2d");
|
q.drawImage(s, -r + 1, 0);
|
return q.getImageData(0, 0, 1, 1).data[3] === 0
|
} else {
|
return false
|
}
|
}
|
function f(u, r, z) {
|
var q = m.createElement("canvas");
|
q.width = 1;
|
q.height = z;
|
var A = q.getContext("2d");
|
A.drawImage(u, 0, 0);
|
var t = A.getImageData(0, 0, 1, z).data;
|
var x = 0;
|
var v = z;
|
var y = z;
|
while (y > x) {
|
var s = t[(y - 1) * 4 + 3];
|
if (s === 0) {
|
v = y
|
} else {
|
x = y
|
}
|
y = (v + x) >> 1
|
}
|
var w = (y / z);
|
return (w === 0) ? 1 : w
|
}
|
function o(K, s, t) {
|
var v = K.naturalWidth, z = K.naturalHeight;
|
var E = t.width, B = t.height;
|
var F = s.getContext("2d");
|
F.save();
|
var r = c(K);
|
if (r) {
|
v /= 2;
|
z /= 2
|
}
|
var I = 1024;
|
var q = m.createElement("canvas");
|
q.width = q.height = I;
|
var u = q.getContext("2d");
|
var G = f(K, v, z);
|
var A = 0;
|
while (A < z) {
|
var J = A + I > z ? z - A : I;
|
var C = 0;
|
while (C < v) {
|
var D = C + I > v ? v - C : I;
|
u.clearRect(0, 0, I, I);
|
u.drawImage(K, -C, -A);
|
var x = (C * E / v) << 0;
|
var y = Math.ceil(D * E / v);
|
var w = (A * B / z / G) << 0;
|
var H = Math.ceil(J * B / z / G);
|
F.drawImage(q, 0, 0, D, J, x, w, y, H);
|
C += I
|
}
|
A += I
|
}
|
F.restore();
|
q = u = null
|
}
|
function p(r, s) {
|
var q;
|
if ("FileReader" in k) {
|
q = new FileReader();
|
q.readAsDataURL(r);
|
q.onload = function() {
|
s(q.result)
|
}
|
} else {
|
return s(r.getAsDataURL())
|
}
|
}
|
function n(r, s) {
|
var q;
|
if ("FileReader" in k) {
|
q = new FileReader();
|
q.readAsBinaryString(r);
|
q.onload = function() {
|
s(q.result)
|
}
|
} else {
|
return s(r.getAsBinary())
|
}
|
}
|
function e(u, s, q, y) {
|
var t, r, x, v, w = this;
|
p(d[u.id], function(z) {
|
t = m.createElement("canvas");
|
t.style.display = "none";
|
m.body.appendChild(t);
|
x = new Image();
|
x.onerror = x.onabort = function() {
|
y({
|
success : false
|
})
|
};
|
x.onload = function() {
|
var F, A, C, B, E;
|
if (!s.width) {
|
s.width = x.width
|
}
|
if (!s.height) {
|
s.height = x.height
|
}
|
v = Math.min(s.width / x.width, s.height / x.height);
|
if (v < 1) {
|
F = Math.round(x.width * v);
|
A = Math.round(x.height * v)
|
} else {
|
if (s.quality && q === "image/jpeg") {
|
F = x.width;
|
A = x.height
|
} else {
|
y({
|
success : false
|
});
|
return
|
}
|
}
|
t.width = F;
|
t.height = A;
|
o(x, t, {
|
width : F,
|
height : A
|
});
|
if (q === "image/jpeg") {
|
B = new h(atob(z.substring(z.indexOf("base64,") + 7)));
|
if (B.headers && B.headers.length) {
|
E = new a();
|
if (E.init(B.get("exif")[0])) {
|
E.setExif("PixelXDimension", F);
|
E.setExif("PixelYDimension", A);
|
B.set("exif", E.getBinary());
|
if (w.hasEventListener("ExifData")) {
|
w.trigger("ExifData", u, E.EXIF())
|
}
|
if (w.hasEventListener("GpsData")) {
|
w.trigger("GpsData", u, E.GPS())
|
}
|
}
|
}
|
}
|
if (s.quality && q === "image/jpeg") {
|
try {
|
z = t.toDataURL(q, s.quality / 100)
|
} catch (D) {
|
z = t.toDataURL(q)
|
}
|
} else {
|
z = t.toDataURL(q)
|
}
|
z = z.substring(z.indexOf("base64,") + 7);
|
z = atob(z);
|
if (B && B.headers && B.headers.length) {
|
z = B.restore(z);
|
B.purge()
|
}
|
t.parentNode.removeChild(t);
|
y({
|
success : true,
|
data : z
|
})
|
};
|
x.src = z
|
})
|
}
|
l.runtimes.Html5 = l.addRuntime("html5", {
|
getFeatures : function() {
|
var v, r, u, t, s, q;
|
r = u = s = q = false;
|
if (k.XMLHttpRequest) {
|
v = new XMLHttpRequest();
|
u = !!v.upload;
|
r = !!(v.sendAsBinary || v.upload)
|
}
|
if (r) {
|
t = !!(v.sendAsBinary || (k.Uint8Array && k.ArrayBuffer));
|
s = !!(File && (File.prototype.getAsDataURL || k.FileReader) && t);
|
q = !!(File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice))
|
}
|
j = l.ua.safari && l.ua.windows;
|
return {
|
html5 : r,
|
dragdrop : (function() {
|
var w = m.createElement("div");
|
return ("draggable" in w) || ("ondragstart" in w && "ondrop" in w)
|
}()),
|
jpgresize : s,
|
pngresize : s,
|
multipart : s || !!k.FileReader || !!k.FormData,
|
canSendBinary : t,
|
cantSendBlobInFormData : !!(l.ua.gecko && k.FormData && k.FileReader && !FileReader.prototype.readAsArrayBuffer) || l.ua.android,
|
progress : u,
|
chunks : q,
|
multi_selection : !(l.ua.safari && l.ua.windows),
|
triggerDialog : (l.ua.gecko && k.FormData || l.ua.webkit)
|
}
|
},
|
init : function(s, u) {
|
var q, t;
|
function r(z) {
|
var x, w, y = [], A, v = {};
|
for (w = 0; w < z.length; w++) {
|
x = z[w];
|
if (v[x.name] && l.ua.safari && l.ua.windows) {
|
continue
|
}
|
v[x.name] = true;
|
A = l.guid();
|
d[A] = x;
|
y.push(new l.File(A, x.fileName || x.name, x.fileSize || x.size))
|
}
|
if (y.length) {
|
s.trigger("FilesAdded", y)
|
}
|
}
|
q = this.getFeatures();
|
if (!q.html5) {
|
u({
|
success : false
|
});
|
return
|
}
|
s.bind("Init", function(A) {
|
var J, I, F = [], z, G, w = A.settings.filters, x, E, v = m.body, H;
|
J = m.createElement("div");
|
J.id = A.id + "_html5_container";
|
l.extend(J.style, {
|
position : "absolute",
|
background : s.settings.shim_bgcolor || "transparent",
|
width : "100px",
|
height : "100px",
|
overflow : "hidden",
|
zIndex : 99999,
|
opacity : s.settings.shim_bgcolor ? "" : 0
|
});
|
J.className = "plupload html5";
|
if (s.settings.container) {
|
v = m.getElementById(s.settings.container);
|
if (l.getStyle(v, "position") === "static") {
|
v.style.position = "relative"
|
}
|
}
|
v.appendChild(J);
|
no_type_restriction: for (z = 0; z < w.length; z++) {
|
x = w[z].extensions.split(/,/);
|
for (G = 0; G < x.length; G++) {
|
if (x[G] === "*") {
|
F = [];
|
break no_type_restriction
|
}
|
E = l.mimeTypes[x[G]];
|
if (E && l.inArray(E, F) === -1) {
|
F.push(E)
|
}
|
}
|
}
|
J.innerHTML = '<input id="' + s.id + '_html5" style="font-size:999px" type="file" accept="' + F.join(",") + '" ' + (s.settings.multi_selection && s.features.multi_selection ? 'multiple="multiple"' : "") + " />";
|
J.scrollTop = 100;
|
H = m.getElementById(s.id + "_html5");
|
if (A.features.triggerDialog) {
|
l.extend(H.style, {
|
position : "absolute",
|
width : "100%",
|
height : "100%"
|
})
|
} else {
|
l.extend(H.style, {
|
cssFloat : "right",
|
styleFloat : "right"
|
})
|
}
|
H.onchange = function() {
|
r(this.files);
|
this.value = ""
|
};
|
I = m.getElementById(A.settings.browse_button);
|
if (I) {
|
var C = A.settings.browse_button_hover, D = A.settings.browse_button_active, B = A.features.triggerDialog ? I : J;
|
if (C) {
|
l.addEvent(B, "mouseover", function() {
|
l.addClass(I, C)
|
}, A.id);
|
l.addEvent(B, "mouseout", function() {
|
l.removeClass(I, C)
|
}, A.id)
|
}
|
if (D) {
|
l.addEvent(B, "mousedown", function() {
|
l.addClass(I, D)
|
}, A.id);
|
l.addEvent(m.body, "mouseup", function() {
|
l.removeClass(I, D)
|
}, A.id)
|
}
|
if (A.features.triggerDialog) {
|
l.addEvent(I, "click", function(K) {
|
var y = m.getElementById(A.id + "_html5");
|
if (y && !y.disabled) {
|
y.click()
|
}
|
K.preventDefault()
|
}, A.id)
|
}
|
}
|
});
|
s.bind("PostInit", function() {
|
var v = m.getElementById(s.settings.drop_element);
|
if (v) {
|
if (j) {
|
l.addEvent(v, "dragenter", function(z) {
|
var y, w, x;
|
y = m.getElementById(s.id + "_drop");
|
if (!y) {
|
y = m.createElement("input");
|
y.setAttribute("type", "file");
|
y.setAttribute("id", s.id + "_drop");
|
y.setAttribute("multiple", "multiple");
|
l.addEvent(y, "change", function() {
|
r(this.files);
|
l.removeEvent(y, "change", s.id);
|
y.parentNode.removeChild(y)
|
}, s.id);
|
l.addEvent(y, "dragover", function(A) {
|
A.stopPropagation()
|
}, s.id);
|
v.appendChild(y)
|
}
|
w = l.getPos(v, m.getElementById(s.settings.container));
|
x = l.getSize(v);
|
if (l.getStyle(v, "position") === "static") {
|
l.extend(v.style, {
|
position : "relative"
|
})
|
}
|
l.extend(y.style, {
|
position : "absolute",
|
display : "block",
|
top : 0,
|
left : 0,
|
width : x.w + "px",
|
height : x.h + "px",
|
opacity : 0
|
})
|
}, s.id);
|
return
|
}
|
l.addEvent(v, "dragover", function(w) {
|
w.preventDefault()
|
}, s.id);
|
l.addEvent(v, "drop", function(x) {
|
var w = x.dataTransfer;
|
if (w && w.files) {
|
r(w.files)
|
}
|
x.preventDefault()
|
}, s.id)
|
}
|
});
|
s.bind("Refresh", function(v) {
|
var w, x, y, A, z;
|
w = m.getElementById(s.settings.browse_button);
|
if (w) {
|
x = l.getPos(w, m.getElementById(v.settings.container));
|
y = l.getSize(w);
|
A = m.getElementById(s.id + "_html5_container");
|
l.extend(A.style, {
|
top : x.y + "px",
|
left : x.x + "px",
|
width : y.w + "px",
|
height : y.h + "px"
|
});
|
if (s.features.triggerDialog) {
|
if (l.getStyle(w, "position") === "static") {
|
l.extend(w.style, {
|
position : "relative"
|
})
|
}
|
z = parseInt(l.getStyle(w, "zIndex"), 10);
|
if (isNaN(z)) {
|
z = 0
|
}
|
l.extend(w.style, {
|
zIndex : z
|
});
|
l.extend(A.style, {
|
zIndex : z - 1
|
})
|
}
|
}
|
});
|
s.bind("DisableBrowse", function(v, x) {
|
var w = m.getElementById(v.id + "_html5");
|
if (w) {
|
w.disabled = x
|
}
|
});
|
s.bind("CancelUpload", function() {
|
if (t && t.abort) {
|
t.abort()
|
}
|
});
|
s.bind("UploadFile", function(v, x) {
|
var y = v.settings, B, w;
|
function A(D, G, C) {
|
var E;
|
if (File.prototype.slice) {
|
try {
|
D.slice();
|
return D.slice(G, C)
|
} catch (F) {
|
return D.slice(G, C - G)
|
}
|
} else {
|
if (E = File.prototype.webkitSlice || File.prototype.mozSlice) {
|
return E.call(D, G, C)
|
} else {
|
return null
|
}
|
}
|
}
|
function z(C) {
|
var F = 0, E = 0;
|
function D() {
|
var L, P, N, O, K, M, H, G = v.settings.url;
|
function J(S) {
|
if (t.sendAsBinary) {
|
t.sendAsBinary(S)
|
} else {
|
if (v.features.canSendBinary) {
|
var Q = new Uint8Array(S.length);
|
for ( var R = 0; R < S.length; R++) {
|
Q[R] = (S.charCodeAt(R) & 255)
|
}
|
t.send(Q.buffer)
|
}
|
}
|
}
|
function I(R) {
|
var V = 0, W = "----pluploadboundary" + l.guid(), T, S = "--", U = "\r\n", Q = "";
|
t = new XMLHttpRequest;
|
if (t.upload) {
|
t.upload.onprogress = function(X) {
|
x.loaded = Math.min(x.size, E + X.loaded - V);
|
v.trigger("UploadProgress", x)
|
}
|
}
|
t.onreadystatechange = function() {
|
var X, Z;
|
if (t.readyState == 4 && v.state !== l.STOPPED) {
|
try {
|
X = t.status
|
} catch (Y) {
|
X = 0
|
}
|
if (X >= 400) {
|
v.trigger("Error", {
|
code : l.HTTP_ERROR,
|
message : l.translate("HTTP Error."),
|
file : x,
|
status : X
|
})
|
} else {
|
if (N) {
|
Z = {
|
chunk : F,
|
chunks : N,
|
response : t.responseText,
|
status : X
|
};
|
v.trigger("ChunkUploaded", x, Z);
|
E += M;
|
if (Z.cancelled) {
|
x.status = l.FAILED;
|
return
|
}
|
x.loaded = Math.min(x.size, (F + 1) * K)
|
} else {
|
x.loaded = x.size
|
}
|
v.trigger("UploadProgress", x);
|
R = L = T = Q = null;
|
if (!N || ++F >= N) {
|
x.status = l.DONE;
|
v.trigger("FileUploaded", x, {
|
response : t.responseText,
|
status : X
|
})
|
} else {
|
D()
|
}
|
}
|
}
|
};
|
if (v.settings.multipart && q.multipart) {
|
O.name = x.target_name || x.name;
|
t.open("post", G, true);
|
l.each(v.settings.headers, function(Y, X) {
|
t.setRequestHeader(X, Y)
|
});
|
if (typeof (R) !== "string" && !!k.FormData) {
|
T = new FormData();
|
l.each(l.extend(O, v.settings.multipart_params), function(Y, X) {
|
T.append(X, Y)
|
});
|
T.append(v.settings.file_data_name, R);
|
t.send(T);
|
return
|
}
|
if (typeof (R) === "string") {
|
t.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + W);
|
l.each(l.extend(O, v.settings.multipart_params), function(Y, X) {
|
Q += S + W + U + 'Content-Disposition: form-data; name="' + X + '"' + U + U;
|
Q += unescape(encodeURIComponent(Y)) + U
|
});
|
H = l.mimeTypes[x.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream";
|
Q += S + W + U + 'Content-Disposition: form-data; name="' + v.settings.file_data_name + '"; filename="' + unescape(encodeURIComponent(x.name)) + '"' + U + "Content-Type: " + H + U + U + R + U + S + W + S + U;
|
V = Q.length - R.length;
|
R = Q;
|
J(R);
|
return
|
}
|
}
|
G = l.buildUrl(v.settings.url, l.extend(O, v.settings.multipart_params));
|
t.open("post", G, true);
|
t.setRequestHeader("Content-Type", "application/octet-stream");
|
l.each(v.settings.headers, function(Y, X) {
|
t.setRequestHeader(X, Y)
|
});
|
if (typeof (R) === "string") {
|
J(R)
|
} else {
|
t.send(R)
|
}
|
}
|
if (x.status == l.DONE || x.status == l.FAILED || v.state == l.STOPPED) {
|
return
|
}
|
O = {
|
name : x.target_name || x.name
|
};
|
if (y.chunk_size && x.size > y.chunk_size && (q.chunks || typeof (C) == "string")) {
|
K = y.chunk_size;
|
N = Math.ceil(x.size / K);
|
M = Math.min(K, x.size - (F * K));
|
if (typeof (C) == "string") {
|
L = C.substring(F * K, F * K + M)
|
} else {
|
L = A(C, F * K, F * K + M)
|
}
|
O.chunk = F;
|
O.chunks = N
|
} else {
|
M = x.size;
|
L = C
|
}
|
if (v.settings.multipart && q.multipart && typeof (L) !== "string" && k.FileReader && q.cantSendBlobInFormData && q.chunks && v.settings.chunk_size) {
|
(function() {
|
var Q = new FileReader();
|
Q.onload = function() {
|
I(Q.result);
|
Q = null
|
};
|
Q.readAsBinaryString(L)
|
}())
|
} else {
|
I(L)
|
}
|
}
|
D()
|
}
|
B = d[x.id];
|
if (q.jpgresize && v.settings.resize && /\.(png|jpg|jpeg)$/i.test(x.name)) {
|
e.call(v, x, v.settings.resize, /\.png$/i.test(x.name) ? "image/png" : "image/jpeg", function(C) {
|
if (C.success) {
|
x.size = C.data.length;
|
z(C.data)
|
} else {
|
if (q.chunks) {
|
z(B)
|
} else {
|
n(B, z)
|
}
|
}
|
})
|
} else {
|
if (!q.chunks && q.jpgresize) {
|
n(B, z)
|
} else {
|
z(B)
|
}
|
}
|
});
|
s.bind("Destroy", function(v) {
|
var x, y, w = m.body, z = {
|
inputContainer : v.id + "_html5_container",
|
inputFile : v.id + "_html5",
|
browseButton : v.settings.browse_button,
|
dropElm : v.settings.drop_element
|
};
|
for (x in z) {
|
y = m.getElementById(z[x]);
|
if (y) {
|
l.removeAllEvents(y, v.id)
|
}
|
}
|
l.removeAllEvents(m.body, v.id);
|
if (v.settings.container) {
|
w = m.getElementById(v.settings.container)
|
}
|
w.removeChild(m.getElementById(z.inputContainer))
|
});
|
u({
|
success : true
|
})
|
}
|
});
|
function b() {
|
var t = false, r;
|
function u(w, y) {
|
var v = t ? 0 : -8 * (y - 1), z = 0, x;
|
for (x = 0; x < y; x++) {
|
z |= (r.charCodeAt(w + x) << Math.abs(v + x * 8))
|
}
|
return z
|
}
|
function q(x, v, w) {
|
var w = arguments.length === 3 ? w : r.length - v - 1;
|
r = r.substr(0, v) + x + r.substr(w + v)
|
}
|
function s(w, x, z) {
|
var A = "", v = t ? 0 : -8 * (z - 1), y;
|
for (y = 0; y < z; y++) {
|
A += String.fromCharCode((x >> Math.abs(v + y * 8)) & 255)
|
}
|
q(A, w, z)
|
}
|
return {
|
II : function(v) {
|
if (v === g) {
|
return t
|
} else {
|
t = v
|
}
|
},
|
init : function(v) {
|
t = false;
|
r = v
|
},
|
SEGMENT : function(v, x, w) {
|
switch (arguments.length) {
|
case 1:
|
return r.substr(v, r.length - v - 1);
|
case 2:
|
return r.substr(v, x);
|
case 3:
|
q(w, v, x);
|
break;
|
default:
|
return r
|
}
|
},
|
BYTE : function(v) {
|
return u(v, 1)
|
},
|
SHORT : function(v) {
|
return u(v, 2)
|
},
|
LONG : function(v, w) {
|
if (w === g) {
|
return u(v, 4)
|
} else {
|
s(v, w, 4)
|
}
|
},
|
SLONG : function(v) {
|
var w = u(v, 4);
|
return (w > 2147483647 ? w - 4294967296 : w)
|
},
|
STRING : function(v, w) {
|
var x = "";
|
for (w += v; v < w; v++) {
|
x += String.fromCharCode(u(v, 1))
|
}
|
return x
|
}
|
}
|
}
|
function h(v) {
|
var x = {
|
65505 : {
|
app : "EXIF",
|
name : "APP1",
|
signature : "Exif\0"
|
},
|
65506 : {
|
app : "ICC",
|
name : "APP2",
|
signature : "ICC_PROFILE\0"
|
},
|
65517 : {
|
app : "IPTC",
|
name : "APP13",
|
signature : "Photoshop 3.0\0"
|
}
|
}, w = [], u, q, s = g, t = 0, r;
|
u = new b();
|
u.init(v);
|
if (u.SHORT(0) !== 65496) {
|
return
|
}
|
q = 2;
|
r = Math.min(1048576, v.length);
|
while (q <= r) {
|
s = u.SHORT(q);
|
if (s >= 65488 && s <= 65495) {
|
q += 2;
|
continue
|
}
|
if (s === 65498 || s === 65497) {
|
break
|
}
|
t = u.SHORT(q + 2) + 2;
|
if (x[s] && u.STRING(q + 4, x[s].signature.length) === x[s].signature) {
|
w.push({
|
hex : s,
|
app : x[s].app.toUpperCase(),
|
name : x[s].name.toUpperCase(),
|
start : q,
|
length : t,
|
segment : u.SEGMENT(q, t)
|
})
|
}
|
q += t
|
}
|
u.init(null);
|
return {
|
headers : w,
|
restore : function(B) {
|
u.init(B);
|
var z = new h(B);
|
if (!z.headers) {
|
return false
|
}
|
for ( var A = z.headers.length; A > 0; A--) {
|
var C = z.headers[A - 1];
|
u.SEGMENT(C.start, C.length, "")
|
}
|
z.purge();
|
q = u.SHORT(2) == 65504 ? 4 + u.SHORT(4) : 2;
|
for ( var A = 0, y = w.length; A < y; A++) {
|
u.SEGMENT(q, 0, w[A].segment);
|
q += w[A].length
|
}
|
return u.SEGMENT()
|
},
|
get : function(A) {
|
var B = [];
|
for ( var z = 0, y = w.length; z < y; z++) {
|
if (w[z].app === A.toUpperCase()) {
|
B.push(w[z].segment)
|
}
|
}
|
return B
|
},
|
set : function(B, A) {
|
var C = [];
|
if (typeof (A) === "string") {
|
C.push(A)
|
} else {
|
C = A
|
}
|
for ( var z = ii = 0, y = w.length; z < y; z++) {
|
if (w[z].app === B.toUpperCase()) {
|
w[z].segment = C[ii];
|
w[z].length = C[ii].length;
|
ii++
|
}
|
if (ii >= C.length) {
|
break
|
}
|
}
|
},
|
purge : function() {
|
w = [];
|
u.init(null)
|
}
|
}
|
}
|
function a() {
|
var t, q, r = {}, w;
|
t = new b();
|
q = {
|
tiff : {
|
274 : "Orientation",
|
34665 : "ExifIFDPointer",
|
34853 : "GPSInfoIFDPointer"
|
},
|
exif : {
|
36864 : "ExifVersion",
|
40961 : "ColorSpace",
|
40962 : "PixelXDimension",
|
40963 : "PixelYDimension",
|
36867 : "DateTimeOriginal",
|
33434 : "ExposureTime",
|
33437 : "FNumber",
|
34855 : "ISOSpeedRatings",
|
37377 : "ShutterSpeedValue",
|
37378 : "ApertureValue",
|
37383 : "MeteringMode",
|
37384 : "LightSource",
|
37385 : "Flash",
|
41986 : "ExposureMode",
|
41987 : "WhiteBalance",
|
41990 : "SceneCaptureType",
|
41988 : "DigitalZoomRatio",
|
41992 : "Contrast",
|
41993 : "Saturation",
|
41994 : "Sharpness"
|
},
|
gps : {
|
0 : "GPSVersionID",
|
1 : "GPSLatitudeRef",
|
2 : "GPSLatitude",
|
3 : "GPSLongitudeRef",
|
4 : "GPSLongitude"
|
}
|
};
|
w = {
|
ColorSpace : {
|
1 : "sRGB",
|
0 : "Uncalibrated"
|
},
|
MeteringMode : {
|
0 : "Unknown",
|
1 : "Average",
|
2 : "CenterWeightedAverage",
|
3 : "Spot",
|
4 : "MultiSpot",
|
5 : "Pattern",
|
6 : "Partial",
|
255 : "Other"
|
},
|
LightSource : {
|
1 : "Daylight",
|
2 : "Fliorescent",
|
3 : "Tungsten",
|
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"
|
},
|
ExposureMode : {
|
0 : "Auto exposure",
|
1 : "Manual exposure",
|
2 : "Auto bracket"
|
},
|
WhiteBalance : {
|
0 : "Auto white balance",
|
1 : "Manual white balance"
|
},
|
SceneCaptureType : {
|
0 : "Standard",
|
1 : "Landscape",
|
2 : "Portrait",
|
3 : "Night scene"
|
},
|
Contrast : {
|
0 : "Normal",
|
1 : "Soft",
|
2 : "Hard"
|
},
|
Saturation : {
|
0 : "Normal",
|
1 : "Low saturation",
|
2 : "High saturation"
|
},
|
Sharpness : {
|
0 : "Normal",
|
1 : "Soft",
|
2 : "Hard"
|
},
|
GPSLatitudeRef : {
|
N : "North latitude",
|
S : "South latitude"
|
},
|
GPSLongitudeRef : {
|
E : "East longitude",
|
W : "West longitude"
|
}
|
};
|
function s(x, F) {
|
var z = t.SHORT(x), C, I, J, E, D, y, A, G, H = [], B = {};
|
for (C = 0; C < z; C++) {
|
A = y = x + 12 * C + 2;
|
J = F[t.SHORT(A)];
|
if (J === g) {
|
continue
|
}
|
E = t.SHORT(A += 2);
|
D = t.LONG(A += 2);
|
A += 4;
|
H = [];
|
switch (E) {
|
case 1:
|
case 7:
|
if (D > 4) {
|
A = t.LONG(A) + r.tiffHeader
|
}
|
for (I = 0; I < D; I++) {
|
H[I] = t.BYTE(A + I)
|
}
|
break;
|
case 2:
|
if (D > 4) {
|
A = t.LONG(A) + r.tiffHeader
|
}
|
B[J] = t.STRING(A, D - 1);
|
continue;
|
case 3:
|
if (D > 2) {
|
A = t.LONG(A) + r.tiffHeader
|
}
|
for (I = 0; I < D; I++) {
|
H[I] = t.SHORT(A + I * 2)
|
}
|
break;
|
case 4:
|
if (D > 1) {
|
A = t.LONG(A) + r.tiffHeader
|
}
|
for (I = 0; I < D; I++) {
|
H[I] = t.LONG(A + I * 4)
|
}
|
break;
|
case 5:
|
A = t.LONG(A) + r.tiffHeader;
|
for (I = 0; I < D; I++) {
|
H[I] = t.LONG(A + I * 4) / t.LONG(A + I * 4 + 4)
|
}
|
break;
|
case 9:
|
A = t.LONG(A) + r.tiffHeader;
|
for (I = 0; I < D; I++) {
|
H[I] = t.SLONG(A + I * 4)
|
}
|
break;
|
case 10:
|
A = t.LONG(A) + r.tiffHeader;
|
for (I = 0; I < D; I++) {
|
H[I] = t.SLONG(A + I * 4) / t.SLONG(A + I * 4 + 4)
|
}
|
break;
|
default:
|
continue
|
}
|
G = (D == 1 ? H[0] : H);
|
if (w.hasOwnProperty(J) && typeof G != "object") {
|
B[J] = w[J][G]
|
} else {
|
B[J] = G
|
}
|
}
|
return B
|
}
|
function v() {
|
var y = g, x = r.tiffHeader;
|
t.II(t.SHORT(x) == 18761);
|
if (t.SHORT(x += 2) !== 42) {
|
return false
|
}
|
r.IFD0 = r.tiffHeader + t.LONG(x += 2);
|
y = s(r.IFD0, q.tiff);
|
r.exifIFD = ("ExifIFDPointer" in y ? r.tiffHeader + y.ExifIFDPointer : g);
|
r.gpsIFD = ("GPSInfoIFDPointer" in y ? r.tiffHeader + y.GPSInfoIFDPointer : g);
|
return true
|
}
|
function u(z, x, C) {
|
var E, B, A, D = 0;
|
if (typeof (x) === "string") {
|
var y = q[z.toLowerCase()];
|
for (hex in y) {
|
if (y[hex] === x) {
|
x = hex;
|
break
|
}
|
}
|
}
|
E = r[z.toLowerCase() + "IFD"];
|
B = t.SHORT(E);
|
for (i = 0; i < B; i++) {
|
A = E + 12 * i + 2;
|
if (t.SHORT(A) == x) {
|
D = A + 8;
|
break
|
}
|
}
|
if (!D) {
|
return false
|
}
|
t.LONG(D, C);
|
return true
|
}
|
return {
|
init : function(x) {
|
r = {
|
tiffHeader : 10
|
};
|
if (x === g || !x.length) {
|
return false
|
}
|
t.init(x);
|
if (t.SHORT(0) === 65505 && t.STRING(4, 5).toUpperCase() === "EXIF\0") {
|
return v()
|
}
|
return false
|
},
|
EXIF : function() {
|
var y;
|
y = s(r.exifIFD, q.exif);
|
if (y.ExifVersion && l.typeOf(y.ExifVersion) === "array") {
|
for ( var z = 0, x = ""; z < y.ExifVersion.length; z++) {
|
x += String.fromCharCode(y.ExifVersion[z])
|
}
|
y.ExifVersion = x
|
}
|
return y
|
},
|
GPS : function() {
|
var x;
|
x = s(r.gpsIFD, q.gps);
|
if (x.GPSVersionID) {
|
x.GPSVersionID = x.GPSVersionID.join(".")
|
}
|
return x
|
},
|
setExif : function(x, y) {
|
if (x !== "PixelXDimension" && x !== "PixelYDimension") {
|
return false
|
}
|
return u("exif", x, y)
|
},
|
getBinary : function() {
|
return t.SEGMENT()
|
}
|
}
|
}
|
})(window, document, plupload);
|