UNPKG

amos-tool

Version:

amos ui tool

120 lines (108 loc) 3.97 kB
"use strict"; 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"); } };