h5图片压缩

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title>图片压缩为base64,再转blob对象上传</title>
    <script src="../js/libs/zepto.min.js"></script>
</head>

<body >
<form id="form1" name="form1" method="post" action="">
    <img src="" alt="">
    <input type="file" name="fileToUpload" id="fileToUpload"/> <br />
    <input type="text" name="compressValue" id="compressValue" style="display:none;" /><br/>
    <input type="button" id='uploadBtn' value="上传" /><br/>
</form>
</body>
<script type="text/javascript">

    //图片上传change事件
    $('#fileToUpload').change(function(){
        uploadBtnChange();
    });

    function uploadBtnChange(){
        var scope = this;
        if(window.File && window.FileReader && window.FileList && window.Blob){
            //获取上传file
            var filefield = document.getElementById('fileToUpload');
            var file = filefield.files[0];

            console.log(file.size/1024);

            //获取用于存放压缩后图片base64编码
            var compressValue = document.getElementById('compressValue');
            processfile(file,compressValue);
        }else{
            alert("此浏览器不完全支持压缩上传图片");
        }
    }

    function processfile(file,compressValue) {
        var reader = new FileReader();
        reader.onload = function (event) {
            var blob = new Blob([event.target.result]);
            window.URL = window.URL || window.webkitURL;
            var blobURL = window.URL.createObjectURL(blob);
            var image = new Image();
            image.src = blobURL;
            image.onload = function() {
                /*压缩*/
                var resized = resizeMe(image);
                compressValue.value = resized;
                /*转成blob对象*/
                var blobblob = convertImgDataToBlob(resized);
                console.log(blobblob);
                $("img").attr('src',image.src)
            }
        };
        reader.readAsArrayBuffer(file);
    }
    /*压缩图片*/
    function resizeMe(img) {
        //压缩的大小
        /*这个大小直接影响压缩后图片的大小*/
        var max_width = 100;
        var max_height = 100;

        var canvas = document.createElement('canvas');
        var width = img.width;
        var height = img.height;
        if(width > height) {
            if(width > max_width) {
                height = Math.round(height *= max_width / width);
                width = max_width;
            }
        }else{
            if(height > max_height) {
                width = Math.round(width *= max_height / height);
                height = max_height;
            }
        }

        canvas.width = width;
        canvas.height = height;

        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, width, height);
        //压缩率
        return canvas.toDataURL("image/jpeg",0.92);
    }
    /*base64转成blob对象*/
    function convertImgDataToBlob(base64Data) {
        var format = "image/jpeg";
        var base64 = base64Data;
        var code = window.atob(base64.split(",")[1]);
        var aBuffer = new window.ArrayBuffer(code.length);
        var uBuffer = new window.Uint8Array(aBuffer);
        for(var i = 0; i < code.length; i++){
            uBuffer[i] = code.charCodeAt(i) & 0xff ;
        }
//        console.info([aBuffer]);
//        console.info(uBuffer);
//        console.info(uBuffer.buffer);
//        console.info(uBuffer.buffer==aBuffer); //true

        var blob=null;
        try{
            blob = new Blob([uBuffer], {type : format});
        }
        catch(e){
            window.BlobBuilder = window.BlobBuilder ||
                    window.WebKitBlobBuilder ||
                    window.MozBlobBuilder ||
                    window.MSBlobBuilder;
            if(e.name == 'TypeError' && window.BlobBuilder){
                var bb = new window.BlobBuilder();
                bb.append(uBuffer.buffer);
                blob = bb.getBlob("image/jpeg");

            }
            else if(e.name == "InvalidStateError"){
                blob = new Blob([aBuffer], {type : format});
            }
            else{

            }
        }
        console.log(blob.size/1024);
        return blob;
    }


    //提交click事件
    $('#uploadBtn').click(function(){
        var preview = document.getElementById('compressValue').value;
        /*if(preview){
         $.ajax({
         url:"index.php",
         type: "POST",
         data:{'imgBase64':preview},
         dataType:'json',
         success:function(json) {
         alert(json);
         },
         error:function(){
         alert('操作失败,请跟技术联系');
         }
         });
         }*/
    });

</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值