zoukankan      html  css  js  c++  java
  • 前端图片压缩(纯js)

    html代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>localResizeIMG</title>
        <!--引入 lrz 插件 用于压缩图片-->
        <script type="text/javascript" src="lrz.bundle.js"></script>
    </head>
    <body>
    <input type="file" accept="image/jpeg" capture="camera" onchange="previewFile()">
    </body>
    <script>
        function previewFile(){
            /* 压缩图片 */
            lrz(document.querySelector('input[type=file]').files[0], {
                quality: 0.4 //设置压缩率
            }).then(function (rst) {
                /* 处理成功后执行 */
                //rst.formData.append('base64img', rst.base64); // 添加额外参数
                console.log(rst.file);
                //预览
                let reader = new FileReader();
                reader.readAsDataURL(rst.file);
                reader.onload = function(e) {
                    var img = document.createElement("img");
                    img.style.width = '500px';
                    img.src = e.target.result;
                    document.body.appendChild(img);
                }
            }).catch(function (err) {
                /* 处理失败后执行 */
            }).always(function () {
                /* 必然执行 */
            })
        }
    </script>
    </html>
    注:上面压缩后返回rst.file(是个Blob对象)可通过form表单直接传服务端,自定义文件名方式:
    var form = new FormData(); // FormData 对象
    form.append("file", rst.file, "file_"+Date.parse(new Date())+".jpg"); // 文件对象

    lrz.bundle.js:
    ! function(e, t) {
        if("object" == typeof exports && "object" == typeof module) module.exports = t();
        else if("function" == typeof define && define.amd) define([], t);
        else {
            var n = t();
            for(var r in n)("object" == typeof exports ? exports : e)[r] = n[r]
        }
    }(this, function() {
        return function(e) {
            function t(n) {
                if(r[n]) return r[n].exports;
                var i = r[n] = {
                    exports: {},
                    id: n,
                    loaded: !1
                };
                return e[n].call(i.exports, i, i.exports, t), i.loaded = !0, i.exports
            }
            var n = window.webpackJsonp;
            window.webpackJsonp = function(r, o) {
                for(var a, s, u = 0, l = []; u < r.length; u++) s = r[u], i[s] && l.push.apply(l, i[s]), i[s] = 0;
                for(a in o) e[a] = o[a];
                for(n && n(r, o); l.length;) l.shift().call(null, t)
            };
            var r = {},
                i = {
                    0: 0
                };
            return t.e = function(e, n) {
                if(0 === i[e]) return n.call(null, t);
                if(void 0 !== i[e]) i[e].push(n);
                else {
                    i[e] = [n];
                    var r = document.getElementsByTagName("head")[0],
                        o = document.createElement("script");
                    o.type = "text/javascript", o.charset = "utf-8", o.async = !0, o.src = t.p + "" + ({}[e] || e) + ".chunk.js", r.appendChild(o)
                }
            }, t.m = e, t.c = r, t.p = "", t(0)
        }([function(e, t, n) {
            function r(e, t) {
                var n = this;
                if(!e) throw new Error("没有收到图片,可能的解决方案:https://github.com/think2011/localResizeIMG/issues/7");
                t = t || {}, n.defaults = {
                     null,
                    height: null,
                    fieldName: "file",
                    quality: .7
                }, n.file = e;
                for(var r in t) t.hasOwnProperty(r) && (n.defaults[r] = t[r]);
                return this.init()
            }
    
            function i(e) {
                var t = null;
                return t = e ? [].filter.call(document.scripts, function(t) {
                    return -1 !== t.src.indexOf(e)
                })[0] : document.scripts[document.scripts.length - 1], t ? t.src.substr(0, t.src.lastIndexOf("/")) : null
            }
    
            function o(e) {
                var t;
                t = e.split(",")[0].indexOf("base64") >= 0 ? atob(e.split(",")[1]) : unescape(e.split(",")[1]);
                for(var n = e.split(",")[0].split(":")[1].split(";")[0], r = new Uint8Array(t.length), i = 0; i < t.length; i++) r[i] = t.charCodeAt(i);
                return new s.Blob([r.buffer], {
                    type: n
                })
            }
            n.p = i("lrz") + "/", window.URL = window.URL || window.webkitURL;
            var a = n(1),
                s = n(4),
                u = n(5),
                l = function(e) {
                    var t = /OS (d)_.* like Mac OS X/g.exec(e),
                        n = /Android (d.*?);/g.exec(e) || /Android/(d.*?) /g.exec(e);
                    return {
                        oldIOS: t ? +t.pop() < 8 : !1,
                        oldAndroid: n ? +n.pop().substr(0, 3) < 4.5 : !1,
                        iOS: /(i[^;]+;( U;)? CPU.+Mac OS X/.test(e),
                        android: /Android/g.test(e),
                        mQQBrowser: /MQQBrowser/g.test(e)
                    }
                }(navigator.userAgent);
            r.prototype.init = function() {
                var e = this,
                    t = e.file,
                    n = "string" == typeof t,
                    r = /^data:/.test(t),
                    i = new Image,
                    u = document.createElement("canvas"),
                    l = n ? t : URL.createObjectURL(t);
                if(e.img = i, e.blob = l, e.canvas = u, n ? e.fileName = r ? "base64.jpg" : t.split("/").pop() : e.fileName = t.name, !document.createElement("canvas").getContext) throw new Error("浏览器不支持canvas");
                return new a(function(n, a) {
                    i.onerror = function() {
                        var e = new Error("加载图片文件失败");
                        throw a(e), e
                    }, i.onload = function() {
                        e._getBase64().then(function(e) {
                            if(e.length < 10) {
                                var t = new Error("生成base64失败");
                                throw a(t), t
                            }
                            return e
                        }).then(function(r) {
                            var i = null;
                            "object" == typeof e.file && r.length > e.file.size ? (i = new FormData, t = e.file) : (i = new s.FormData, t = o(r)), i.append(e.defaults.fieldName, t, e.fileName.replace(/..+/g, ".jpg")), n({
                                formData: i,
                                fileLen: +t.size,
                                base64: r,
                                base64Len: r.length,
                                origin: e.file,
                                file: t
                            });
                            for(var a in e) e.hasOwnProperty(a) && (e[a] = null);
                            URL.revokeObjectURL(e.blob)
                        })
                    }, !r && (i.crossOrigin = "*"), i.src = l
                })
            }, r.prototype._getBase64 = function() {
                var e = this,
                    t = e.img,
                    n = e.file,
                    r = e.canvas;
                return new a(function(i) {
                    try {
                        u.getData("object" == typeof n ? n : t, function() {
                            e.orientation = u.getTag(this, "Orientation"), e.resize = e._getResize(), e.ctx = r.getContext("2d"), r.width = e.resize.width, r.height = e.resize.height, e.ctx.fillStyle = "#fff", e.ctx.fillRect(0, 0, r.width, r.height), l.oldIOS ? e._createBase64ForOldIOS().then(i) : e._createBase64().then(i)
                        })
                    } catch(o) {
                        throw new Error(o)
                    }
                })
            }, r.prototype._createBase64ForOldIOS = function() {
                var e = this,
                    t = e.img,
                    r = e.canvas,
                    i = e.defaults,
                    o = e.orientation;
                return new a(function(e) {
                    n.e(1, function(n) {
                        var a = [n(6)];
                        (function(n) {
                            var a = new n(t);
                            "5678".indexOf(o) > -1 ? a.render(r, {
                                 r.height,
                                height: r.width,
                                orientation: o
                            }) : a.render(r, {
                                 r.width,
                                height: r.height,
                                orientation: o
                            }), e(r.toDataURL("image/jpeg", i.quality))
                        }).apply(null, a)
                    })
                })
            }, r.prototype._createBase64 = function() {
                var e = this,
                    t = e.resize,
                    r = e.img,
                    i = e.canvas,
                    o = e.ctx,
                    s = e.defaults,
                    u = e.orientation;
                switch(u) {
                    case 3:
                        o.rotate(180 * Math.PI / 180), o.drawImage(r, -t.width, -t.height, t.width, t.height);
                        break;
                    case 6:
                        o.rotate(90 * Math.PI / 180), o.drawImage(r, 0, -t.width, t.height, t.width);
                        break;
                    case 8:
                        o.rotate(270 * Math.PI / 180), o.drawImage(r, -t.height, 0, t.height, t.width);
                        break;
                    case 2:
                        o.translate(t.width, 0), o.scale(-1, 1), o.drawImage(r, 0, 0, t.width, t.height);
                        break;
                    case 4:
                        o.translate(t.width, 0), o.scale(-1, 1), o.rotate(180 * Math.PI / 180), o.drawImage(r, -t.width, -t.height, t.width, t.height);
                        break;
                    case 5:
                        o.translate(t.width, 0), o.scale(-1, 1), o.rotate(90 * Math.PI / 180), o.drawImage(r, 0, -t.width, t.height, t.width);
                        break;
                    case 7:
                        o.translate(t.width, 0), o.scale(-1, 1), o.rotate(270 * Math.PI / 180), o.drawImage(r, -t.height, 0, t.height, t.width);
                        break;
                    default:
                        o.drawImage(r, 0, 0, t.width, t.height)
                }
                return new a(function(e) {
                    l.oldAndroid || l.mQQBrowser || !navigator.userAgent ? n.e(2, function(t) {
                        var n = [t(7)];
                        (function(t) {
                            var n = new t,
                                r = o.getImageData(0, 0, i.width, i.height);
                            e(n.encode(r, 100 * s.quality))
                        }).apply(null, n)
                    }) : e(i.toDataURL("image/jpeg", s.quality))
                })
            }, r.prototype._getResize = function() {
                var e = this,
                    t = e.img,
                    n = e.defaults,
                    r = n.width,
                    i = n.height,
                    o = e.orientation,
                    a = {
                         t.width,
                        height: t.height
                    };
                if("5678".indexOf(o) > -1 && (a.width = t.height, a.height = t.width), a.width < r || a.height < i) return a;
                var s = a.width / a.height;
                for(r && i ? s >= r / i ? a.width > r && (a.width = r, a.height = Math.ceil(r / s)) : a.height > i && (a.height = i, a.width = Math.ceil(i * s)) : r ? r < a.width && (a.width = r, a.height = Math.ceil(r / s)) : i && i < a.height && (a.width = Math.ceil(i * s), a.height = i); a.width >= 3264 || a.height >= 2448;) a.width *= .8, a.height *= .8;
                return a
            }, window.lrz = function(e, t) {
                return new r(e, t)
            }, window.lrz.version = "4.9.40", e.exports = window.lrz
        }, function(e, t, n) {
            (function(t) {
                ! function(n) {
                    function r(e, t) {
                        return function() {
                            e.apply(t, arguments)
                        }
                    }
    
                    function i(e) {
                        if("object" != typeof this) throw new TypeError("Promises must be constructed via new");
                        if("function" != typeof e) throw new TypeError("not a function");
                        this._state = null, this._value = null, this._deferreds = [], c(e, r(a, this), r(s, this))
                    }
    
                    function o(e) {
                        var t = this;
                        return null === this._state ? void this._deferreds.push(e) : void f(function() {
                            var n = t._state ? e.onFulfilled : e.onRejected;
                            if(null === n) return void(t._state ? e.resolve : e.reject)(t._value);
                            var r;
                            try {
                                r = n(t._value)
                            } catch(i) {
                                return void e.reject(i)
                            }
                            e.resolve(r)
                        })
                    }
    
                    function a(e) {
                        try {
                            if(e === this) throw new TypeError("A promise cannot be resolved with itself.");
                            if(e && ("object" == typeof e || "function" == typeof e)) {
                                var t = e.then;
                                if("function" == typeof t) return void c(r(t, e), r(a, this), r(s, this))
                            }
                            this._state = !0, this._value = e, u.call(this)
                        } catch(n) {
                            s.call(this, n)
                        }
                    }
    
                    function s(e) {
                        this._state = !1, this._value = e, u.call(this)
                    }
    
                    function u() {
                        for(var e = 0, t = this._deferreds.length; t > e; e++) o.call(this, this._deferreds[e]);
                        this._deferreds = null
                    }
    
                    function l(e, t, n, r) {
                        this.onFulfilled = "function" == typeof e ? e : null, this.onRejected = "function" == typeof t ? t : null, this.resolve = n, this.reject = r
                    }
    
                    function c(e, t, n) {
                        var r = !1;
                        try {
                            e(function(e) {
                                r || (r = !0, t(e))
                            }, function(e) {
                                r || (r = !0, n(e))
                            })
                        } catch(i) {
                            if(r) return;
                            r = !0, n(i)
                        }
                    }
                    var f = "function" == typeof t && t || function(e) {
                            setTimeout(e, 1)
                        },
                        d = Array.isArray || function(e) {
                            return "[object Array]" === Object.prototype.toString.call(e)
                        };
                    i.prototype["catch"] = function(e) {
                        return this.then(null, e)
                    }, i.prototype.then = function(e, t) {
                        var n = this;
                        return new i(function(r, i) {
                            o.call(n, new l(e, t, r, i))
                        })
                    }, i.all = function() {
                        var e = Array.prototype.slice.call(1 === arguments.length && d(arguments[0]) ? arguments[0] : arguments);
                        return new i(function(t, n) {
                            function r(o, a) {
                                try {
                                    if(a && ("object" == typeof a || "function" == typeof a)) {
                                        var s = a.then;
                                        if("function" == typeof s) return void s.call(a, function(e) {
                                            r(o, e)
                                        }, n)
                                    }
                                    e[o] = a, 0 === --i && t(e)
                                } catch(u) {
                                    n(u)
                                }
                            }
                            if(0 === e.length) return t([]);
                            for(var i = e.length, o = 0; o < e.length; o++) r(o, e[o])
                        })
                    }, i.resolve = function(e) {
                        return e && "object" == typeof e && e.constructor === i ? e : new i(function(t) {
                            t(e)
                        })
                    }, i.reject = function(e) {
                        return new i(function(t, n) {
                            n(e)
                        })
                    }, i.race = function(e) {
                        return new i(function(t, n) {
                            for(var r = 0, i = e.length; i > r; r++) e[r].then(t, n)
                        })
                    }, i._setImmediateFn = function(e) {
                        f = e
                    }, i.prototype.always = function(e) {
                        var t = this.constructor;
                        return this.then(function(n) {
                            return t.resolve(e()).then(function() {
                                return n
                            })
                        }, function(n) {
                            return t.resolve(e()).then(function() {
                                throw n
                            })
                        })
                    }, "undefined" != typeof e && e.exports ? e.exports = i : n.Promise || (n.Promise = i)
                }(this)
            }).call(t, n(2).setImmediate)
        }, function(e, t, n) {
            (function(e, r) {
                function i(e, t) {
                    this._id = e, this._clearFn = t
                }
                var o = n(3).nextTick,
                    a = Function.prototype.apply,
                    s = Array.prototype.slice,
                    u = {},
                    l = 0;
                t.setTimeout = function() {
                    return new i(a.call(setTimeout, window, arguments), clearTimeout)
                }, t.setInterval = function() {
                    return new i(a.call(setInterval, window, arguments), clearInterval)
                }, t.clearTimeout = t.clearInterval = function(e) {
                    e.close()
                }, i.prototype.unref = i.prototype.ref = function() {}, i.prototype.close = function() {
                    this._clearFn.call(window, this._id)
                }, t.enroll = function(e, t) {
                    clearTimeout(e._idleTimeoutId), e._idleTimeout = t
                }, t.unenroll = function(e) {
                    clearTimeout(e._idleTimeoutId), e._idleTimeout = -1
                }, t._unrefActive = t.active = function(e) {
                    clearTimeout(e._idleTimeoutId);
                    var t = e._idleTimeout;
                    t >= 0 && (e._idleTimeoutId = setTimeout(function() {
                        e._onTimeout && e._onTimeout()
                    }, t))
                }, t.setImmediate = "function" == typeof e ? e : function(e) {
                    var n = l++,
                        r = arguments.length < 2 ? !1 : s.call(arguments, 1);
                    return u[n] = !0, o(function() {
                        u[n] && (r ? e.apply(null, r) : e.call(null), t.clearImmediate(n))
                    }), n
                }, t.clearImmediate = "function" == typeof r ? r : function(e) {
                    delete u[e]
                }
            }).call(t, n(2).setImmediate, n(2).clearImmediate)
        }, function(e, t) {
            function n() {
                l = !1, a.length ? u = a.concat(u) : c = -1, u.length && r()
            }
    
            function r() {
                if(!l) {
                    var e = setTimeout(n);
                    l = !0;
                    for(var t = u.length; t;) {
                        for(a = u, u = []; ++c < t;) a && a[c].run();
                        c = -1, t = u.length
                    }
                    a = null, l = !1, clearTimeout(e)
                }
            }
    
            function i(e, t) {
                this.fun = e, this.array = t
            }
    
            function o() {}
            var a, s = e.exports = {},
                u = [],
                l = !1,
                c = -1;
            s.nextTick = function(e) {
                var t = new Array(arguments.length - 1);
                if(arguments.length > 1)
                    for(var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
                u.push(new i(e, t)), 1 !== u.length || l || setTimeout(r, 0)
            }, i.prototype.run = function() {
                this.fun.apply(null, this.array)
            }, s.title = "browser", s.browser = !0, s.env = {}, s.argv = [], s.version = "", s.versions = {}, s.on = o, s.addListener = o, s.once = o, s.off = o, s.removeListener = o, s.removeAllListeners = o, s.emit = o, s.binding = function(e) {
                throw new Error("process.binding is not supported")
            }, s.cwd = function() {
                return "/"
            }, s.chdir = function(e) {
                throw new Error("process.chdir is not supported")
            }, s.umask = function() {
                return 0
            }
        }, function(e, t) {
            function n() {
                var e = ~navigator.userAgent.indexOf("Android") && ~navigator.vendor.indexOf("Google") && !~navigator.userAgent.indexOf("Chrome");
                return e && navigator.userAgent.match(/AppleWebKit/(d+)/).pop() <= 534 || /MQQBrowser/g.test(navigator.userAgent)
            }
            var r = function() {
                    try {
                        return new Blob, !0
                    } catch(e) {
                        return !1
                    }
                }() ? window.Blob : function(e, t) {
                    var n = new(window.BlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder || window.MozBlobBuilder);
                    return e.forEach(function(e) {
                        n.append(e)
                    }), n.getBlob(t ? t.type : void 0)
                },
                i = function() {
                    function e() {
                        var e = this,
                            n = [],
                            i = Array(21).join("-") + (+new Date * (1e16 * Math.random())).toString(36),
                            o = XMLHttpRequest.prototype.send;
                        this.getParts = function() {
                            return n.toString()
                        }, this.append = function(e, t, r) {
                            n.push("--" + i + '
    Content-Disposition: form-data; name="' + e + '"'), t instanceof Blob ? (n.push('; filename="' + (r || "blob") + '"
    Content-Type: ' + t.type + "
    
    "), n.push(t)) : n.push("
    
    " + t), n.push("
    ")
                        }, t++, XMLHttpRequest.prototype.send = function(a) {
                            var s, u, l = this;
                            a === e ? (n.push("--" + i + "--
    "), u = new r(n), s = new FileReader, s.onload = function() {
                                o.call(l, s.result)
                            }, s.onerror = function(e) {
                                throw e
                            }, s.readAsArrayBuffer(u), this.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + i), t--, 0 == t && (XMLHttpRequest.prototype.send = o)) : o.call(this, a)
                        }
                    }
                    var t = 0;
                    return e.prototype = Object.create(FormData.prototype), e
                }();
            e.exports = {
                Blob: r,
                FormData: n() ? i : FormData
            }
        }, function(e, t, n) {
            var r, i;
            (function() {
                function n(e) {
                    return !!e.exifdata
                }
    
                function o(e, t) {
                    t = t || e.match(/^data:([^;]+);base64,/im)[1] || "", e = e.replace(/^data:([^;]+);base64,/gim, "");
                    for(var n = atob(e), r = n.length, i = new ArrayBuffer(r), o = new Uint8Array(i), a = 0; r > a; a++) o[a] = n.charCodeAt(a);
                    return i
                }
    
                function a(e, t) {
                    var n = new XMLHttpRequest;
                    n.open("GET", e, !0), n.responseType = "blob", n.onload = function(e) {
                        (200 == this.status || 0 === this.status) && t(this.response)
                    }, n.send()
                }
    
                function s(e, t) {
                    function n(n) {
                        var r = u(n),
                            i = l(n);
                        e.exifdata = r || {}, e.iptcdata = i || {}, t && t.call(e)
                    }
                    if(e.src)
                        if(/^data:/i.test(e.src)) {
                            var r = o(e.src);
                            n(r)
                        } else if(/^blob:/i.test(e.src)) {
                        var i = new FileReader;
                        i.onload = function(e) {
                            n(e.target.result)
                        }, a(e.src, function(e) {
                            i.readAsArrayBuffer(e)
                        })
                    } else {
                        var s = new XMLHttpRequest;
                        s.onload = function() {
                            200 == this.status || 0 === this.status ? n(s.response) : t(new Error("Could not load image")), s = null
                        }, s.open("GET", e.src, !0), s.responseType = "arraybuffer", s.send(null)
                    } else if(window.FileReader && (e instanceof window.Blob || e instanceof window.File)) {
                        var i = new FileReader;
                        i.onload = function(e) {
                            p && console.log("Got file of length " + e.target.result.byteLength), n(e.target.result)
                        }, i.readAsArrayBuffer(e)
                    }
                }
    
                function u(e) {
                    var t = new DataView(e);
                    if(p && console.log("Got file of length " + e.byteLength), 255 != t.getUint8(0) || 216 != t.getUint8(1)) return p && console.log("Not a valid JPEG"), !1;
                    for(var n, r = 2, i = e.byteLength; i > r;) {
                        if(255 != t.getUint8(r)) return p && console.log("Not a valid marker at offset " + r + ", found: " + t.getUint8(r)), !1;
                        if(n = t.getUint8(r + 1), p && console.log(n), 225 == n) return p && console.log("Found 0xFFE1 marker"), g(t, r + 4, t.getUint16(r + 2) - 2);
                        r += 2 + t.getUint16(r + 2)
                    }
                }
    
                function l(e) {
                    var t = new DataView(e);
                    if(p && console.log("Got file of length " + e.byteLength), 255 != t.getUint8(0) || 216 != t.getUint8(1)) return p && console.log("Not a valid JPEG"), !1;
                    for(var n = 2, r = e.byteLength, i = function(e, t) {
                            return 56 === e.getUint8(t) && 66 === e.getUint8(t + 1) && 73 === e.getUint8(t + 2) && 77 === e.getUint8(t + 3) && 4 === e.getUint8(t + 4) && 4 === e.getUint8(t + 5)
                        }; r > n;) {
                        if(i(t, n)) {
                            var o = t.getUint8(n + 7);
                            o % 2 !== 0 && (o += 1), 0 === o && (o = 4);
                            var a = n + 8 + o,
                                s = t.getUint16(n + 6 + o);
                            return c(e, a, s)
                        }
                        n++
                    }
                }
    
                function c(e, t, n) {
                    for(var r, i, o, a, s, u = new DataView(e), l = {}, c = t; t + n > c;) 28 === u.getUint8(c) && 2 === u.getUint8(c + 1) && (a = u.getUint8(c + 2), a in b && (o = u.getInt16(c + 3), s = o + 5, i = b[a], r = h(u, c + 5, o), l.hasOwnProperty(i) ? l[i] instanceof Array ? l[i].push(r) : l[i] = [l[i], r] : l[i] = r)), c++;
                    return l
                }
    
                function f(e, t, n, r, i) {
                    var o, a, s, u = e.getUint16(n, !i),
                        l = {};
                    for(s = 0; u > s; s++) o = n + 12 * s + 2, a = r[e.getUint16(o, !i)], !a && p && console.log("Unknown tag: " + e.getUint16(o, !i)), l[a] = d(e, o, t, n, i);
                    return l
                }
    
                function d(e, t, n, r, i) {
                    var o, a, s, u, l, c, f = e.getUint16(t + 2, !i),
                        d = e.getUint32(t + 4, !i),
                        g = e.getUint32(t + 8, !i) + n;
                    switch(f) {
                        case 1:
                        case 7:
                            if(1 == d) return e.getUint8(t + 8, !i);
                            for(o = d > 4 ? g : t + 8, a = [], u = 0; d > u; u++) a[u] = e.getUint8(o + u);
                            return a;
                        case 2:
                            return o = d > 4 ? g : t + 8, h(e, o, d - 1);
                        case 3:
                            if(1 == d) return e.getUint16(t + 8, !i);
                            for(o = d > 2 ? g : t + 8, a = [], u = 0; d > u; u++) a[u] = e.getUint16(o + 2 * u, !i);
                            return a;
                        case 4:
                            if(1 == d) return e.getUint32(t + 8, !i);
                            for(a = [], u = 0; d > u; u++) a[u] = e.getUint32(g + 4 * u, !i);
                            return a;
                        case 5:
                            if(1 == d) return l = e.getUint32(g, !i), c = e.getUint32(g + 4, !i), s = new Number(l / c), s.numerator = l, s.denominator = c, s;
                            for(a = [], u = 0; d > u; u++) l = e.getUint32(g + 8 * u, !i), c = e.getUint32(g + 4 + 8 * u, !i), a[u] = new Number(l / c), a[u].numerator = l, a[u].denominator = c;
                            return a;
                        case 9:
                            if(1 == d) return e.getInt32(t + 8, !i);
                            for(a = [], u = 0; d > u; u++) a[u] = e.getInt32(g + 4 * u, !i);
                            return a;
                        case 10:
                            if(1 == d) return e.getInt32(g, !i) / e.getInt32(g + 4, !i);
                            for(a = [], u = 0; d > u; u++) a[u] = e.getInt32(g + 8 * u, !i) / e.getInt32(g + 4 + 8 * u, !i);
                            return a
                    }
                }
    
                function h(e, t, n) {
                    var r, i = "";
                    for(r = t; t + n > r; r++) i += String.fromCharCode(e.getUint8(r));
                    return i
                }
    
                function g(e, t) {
                    if("Exif" != h(e, t, 4)) return p && console.log("Not valid EXIF data! " + h(e, t, 4)), !1;
                    var n, r, i, o, a, s = t + 6;
                    if(18761 == e.getUint16(s)) n = !1;
                    else {
                        if(19789 != e.getUint16(s)) return p && console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"), !1;
                        n = !0
                    }
                    if(42 != e.getUint16(s + 2, !n)) return p && console.log("Not valid TIFF data! (no 0x002A)"), !1;
                    var u = e.getUint32(s + 4, !n);
                    if(8 > u) return p && console.log("Not valid TIFF data! (First offset less than 8)", e.getUint32(s + 4, !n)), !1;
                    if(r = f(e, s, s + u, y, n), r.ExifIFDPointer) {
                        o = f(e, s, s + r.ExifIFDPointer, w, n);
                        for(i in o) {
                            switch(i) {
                                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":
                                    o[i] = S[i][o[i]];
                                    break;
                                case "ExifVersion":
                                case "FlashpixVersion":
                                    o[i] = String.fromCharCode(o[i][0], o[i][1], o[i][2], o[i][3]);
                                    break;
                                case "ComponentsConfiguration":
                                    o[i] = S.Components[o[i][0]] + S.Components[o[i][1]] + S.Components[o[i][2]] + S.Components[o[i][3]]
                            }
                            r[i] = o[i]
                        }
                    }
                    if(r.GPSInfoIFDPointer) {
                        a = f(e, s, s + r.GPSInfoIFDPointer, v, n);
                        for(i in a) {
                            switch(i) {
                                case "GPSVersionID":
                                    a[i] = a[i][0] + "." + a[i][1] + "." + a[i][2] + "." + a[i][3]
                            }
                            r[i] = a[i]
                        }
                    }
                    return r
                }
                var p = !1,
                    m = function(e) {
                        return e instanceof m ? e : this instanceof m ? void(this.EXIFwrapped = e) : new m(e)
                    };
                "undefined" != typeof e && e.exports && (t = e.exports = m), t.EXIF = m;
                var w = m.Tags = {
                        36864: "ExifVersion",
                        40960: "FlashpixVersion",
                        40961: "ColorSpace",
                        40962: "PixelXDimension",
                        40963: "PixelYDimension",
                        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: "ISOSpeedRatings",
                        34856: "OECF",
                        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: "DigitalZoomRation",
                        41989: "FocalLengthIn35mmFilm",
                        41990: "SceneCaptureType",
                        41991: "GainControl",
                        41992: "Contrast",
                        41993: "Saturation",
                        41994: "Sharpness",
                        41995: "DeviceSettingDescription",
                        41996: "SubjectDistanceRange",
                        40965: "InteroperabilityIFDPointer",
                        42016: "ImageUniqueID"
                    },
                    y = m.TiffTags = {
                        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"
                    },
                    v = m.GPSTags = {
                        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"
                    },
                    S = m.StringValues = {
                        ExposureProgram: {
                            0: "Not defined",
                            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: "Not defined",
                            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"
                        },
                        Components: {
                            0: "",
                            1: "Y",
                            2: "Cb",
                            3: "Cr",
                            4: "R",
                            5: "G",
                            6: "B"
                        }
                    },
                    b = {
                        120: "caption",
                        110: "credit",
                        25: "keywords",
                        55: "dateCreated",
                        80: "byline",
                        85: "bylineTitle",
                        122: "captionWriter",
                        105: "headline",
                        116: "copyright",
                        15: "category"
                    };
                m.getData = function(e, t) {
                    return(e instanceof Image || e instanceof HTMLImageElement) && !e.complete ? !1 : (n(e) ? t && t.call(e) : s(e, t), !0)
                }, m.getTag = function(e, t) {
                    return n(e) ? e.exifdata[t] : void 0
                }, m.getAllTags = function(e) {
                    if(!n(e)) return {};
                    var t, r = e.exifdata,
                        i = {};
                    for(t in r) r.hasOwnProperty(t) && (i[t] = r[t]);
                    return i
                }, m.pretty = function(e) {
                    if(!n(e)) return "";
                    var t, r = e.exifdata,
                        i = "";
                    for(t in r) r.hasOwnProperty(t) && (i += "object" == typeof r[t] ? r[t] instanceof Number ? t + " : " + r[t] + " [" + r[t].numerator + "/" + r[t].denominator + "]
    " : t + " : [" + r[t].length + " values]
    " : t + " : " + r[t] + "
    ");
                    return i
                }, m.readFromBinaryFile = function(e) {
                    return u(e)
                }, r = [], i = function() {
                    return m
                }.apply(t, r), !(void 0 !== i && (e.exports = i))
            }).call(this)
        }])
    });
    //# sourceMappingURL=lrz.bundle.js.map
  • 相关阅读:
    处理excel表
    生成登陆验证码
    IKAnalyzer分词例子
    JAVA中不用+ 如何实现加法
    开发者应该掌握的Java代码优化技能
    Spring Boot Maven插件
    23种设计模式(1)-单例模式
    Spring AOP 创建切面
    Spring AOP 创建增强类
    Spring AOP基础知识
  • 原文地址:https://www.cnblogs.com/007sx/p/8720614.html
Copyright © 2011-2022 走看看