js压缩图片实测

$.fn.localResizeIMG = function(obj) {
    this.on('change', function() {
        if(validate_img(this)){
            var file = this.files[0];
            var URL = window.URL || window.webkitURL;
            var blob = URL.createObjectURL(file);
            // 执行前函数
            if ($.isFunction(obj.before)) {
                obj.before(this, blob, file)
            };

            _create(blob, file);
            // this.value = ''; // 清空临时数据
        }
    });

    /**
     * 生成base64
     * @param blob 通过file获得的二进制
     */
    function _create(blob, file) {
        var img = new Image();
        img.src = blob;

        img.onload = function() {
            var that = this;
            //图片越大压缩程度越越高 质量越低
            obj.quality = 1 - (file.size/(10*1024*1024)).toFixed(1);
            if(obj.quality < 0.6){
                obj.quality = 0.6;
         }
            //生成比例
            var w = that.width,
                h = that.height,
                scale = w / h;
            w = obj.width || w;
            h = w / scale;
            //小于预设宽度则不做处理
            if(obj.width && that.width < obj.width){
                w = that.width,h = that.height;
            }
            //生成canvas
            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');
            $(canvas).attr({
                width: w,
                height: h
            });
            ctx.drawImage(that, 0, 0, w, h);

            /**
             * 生成base64
             * 兼容修复移动设备需要引入mobileBUGFix.js
             */
            var base64 = canvas.toDataURL('image/jpeg', obj.quality || 0.8);

            // 修复IOS
            /*if (navigator.userAgent.match(/iphone/i)) {
                var mpImg = new MegaPixImage(img);
                mpImg.render(canvas, {
                    maxWidth: w,
                    maxHeight: h,
                    quality: obj.quality || 0.8
                });
                base64 = canvas.toDataURL('image/jpeg', obj.quality || 0.8);
            }

            // 修复android
            if (navigator.userAgent.match(/Android/i)) {
                var encoder = new JPEGEncoder();
                base64 = encoder.encode(ctx.getImageData(0, 0, w, h), obj.quality * 100 || 80);
            }*/

            // 生成结果
            var result = {
                base64: base64,
                clearBase64: base64.substr(base64.indexOf(',') + 1)
            };

            // 执行后函数
            obj.success(result);
        };
    }
};

//限制上传文件的类型和大小
function validate_img(ele) {
    // 返回 KB,保留小数点后两位
    var file = ele.value;
    if (!/.(gif|jpg|jpeg|png|GIF|JPG|bmp)$/.test(file)) {
        alert("图片类型必须是.gif,jpeg,jpg,png,bmp中的一种");
        return false;

    } else {
        //alert((ele.files[0].size).toFixed(2));
        //返回Byte(B),保留小数点后两位
        if (((ele.files[0].size).toFixed(2)) >= (10 * 1024 * 1024)) {
            alert("请上传小于10M的图片");
            return false;
        }
    }
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值