amos-tool
Version:
amos ui tool
120 lines (108 loc) • 3.97 kB
JavaScript
;
var utils = require("./../utils"), $support = {}, support = function() {
if (utils.isEmpty($support)) {
var e = document.createElement("canvas"), t = e.getContext("2d");
$support = {
canvas: !!t,
imageData: !!t.getImageData,
dataURL: !!e.toDataURL,
btoa: !!window.btoa
};
}
return $support;
}, downloadMime = "image/octet-stream";
function scaleCanvas(e, t, a) {
var n = e.width, r = e.height;
null == t && (t = n), null == a && (a = r);
var o = document.createElement("canvas"), g = o.getContext("2d");
return o.width = t, o.height = a, g.drawImage(e, 0, 0, n, r, 0, 0, t, a), o;
}
function getDataURL(e, t, a, n) {
return (e = scaleCanvas(e, a, n)).toDataURL(t);
}
function getBlob(e, t, a) {
var n = a.type || "image/png", r = a.width, o = a.height, g = a.encoderOptions || 1;
return (e = scaleCanvas(e, r, o)).toBlob(t, n, g);
}
function saveFile(e) {
document.location.href = e;
}
function genImage(e) {
var t = document.createElement("img");
return t.src = e, t;
}
function fixType(e) {
return "image/" + (e = e.toLowerCase().replace(/jpg/i, "jpeg")).match(/png|jpeg|bmp|gif/)[0];
}
function encodeData(e) {
if (!window.btoa) throw new Error("btoa undefined");
var t = "";
if ("string" == typeof e) t = e; else for (var a = 0; a < e.length; a++) t += String.fromCharCode(e[a]);
return btoa(t);
}
function getImageData(e) {
var t = e.width, a = e.height;
return e.getContext("2d").getImageData(0, 0, t, a);
}
function makeURI(e, t) {
return "data:" + t + ";base64," + e;
}
var genBitmapImage = function(e) {
var t = e.width, a = e.height, n = t * a * 3, r = n + 54, o = [ 66, 77, 255 & r, r >> 8 & 255, r >> 16 & 255, r >> 24 & 255, 0, 0, 0, 0, 54, 0, 0, 0 ], g = [ 40, 0, 0, 0, 255 & t, t >> 8 & 255, t >> 16 & 255, t >> 24 & 255, 255 & a, a >> 8 & 255, a >> 16 & 255, a >> 24 & 255, 1, 0, 24, 0, 0, 0, 0, 0, 255 & n, n >> 8 & 255, n >> 16 & 255, n >> 24 & 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i = (4 - 3 * t % 4) % 4, s = e.data, u = "", c = t << 2, m = a, v = String.fromCharCode;
do {
for (var p = c * (m - 1), f = "", d = 0; d < t; d++) {
var l = d << 2;
f += v(s[p + l + 2]) + v(s[p + l + 1]) + v(s[p + l]);
}
for (var I = 0; I < i; I++) f += String.fromCharCode(0);
u += f;
} while (--m);
return encodeData(o.concat(g)) + encodeData(u);
}, saveAsImage = function(e, t, a, n) {
if (support().canvas && support().dataURL) if ("string" == typeof e && (e = document.getElementById(e)),
null == n && (n = "png"), n = fixType(n), /bmp/.test(n)) {
var r = getImageData(scaleCanvas(e, t, a));
saveFile(makeURI(genBitmapImage(r), downloadMime));
} else {
saveFile(getDataURL(e, n, t, a).replace(n, downloadMime));
}
}, convert2Image = function(e, t, a, n) {
if (support().canvas && support().dataURL) {
if ("string" == typeof e && (e = document.getElementById(e)), null == n && (n = "png"),
n = fixType(n), /bmp/.test(n)) {
var r = getImageData(scaleCanvas(e, t, a));
return genImage(makeURI(genBitmapImage(r), "image/bmp"));
}
return genImage(getDataURL(e, n, t, a));
}
};
module.exports = {
saveAsImage: saveAsImage,
saveAsPNG: function(e, t, a) {
return saveAsImage(e, t, a, "png");
},
saveAsJPEG: function(e, t, a) {
return saveAsImage(e, t, a, "jpeg");
},
saveAsGIF: function(e, t, a) {
return saveAsImage(e, t, a, "gif");
},
saveAsBMP: function(e, t, a) {
return saveAsImage(e, t, a, "bmp");
},
convert2Image: convert2Image,
convert2data: getDataURL,
convert2Blob: getBlob,
convert2PNG: function(e, t, a) {
return convert2Image(e, t, a, "png");
},
convert2JPEG: function(e, t, a) {
return convert2Image(e, t, a, "jpeg");
},
convert2GIF: function(e, t, a) {
return convert2Image(e, t, a, "gif");
},
convert2BMP: function(e, t, a) {
return convert2Image(e, t, a, "bmp");
}
};