zoukankan      html  css  js  c++  java
  • 上传图片并压缩

    之前帮后端写了一个上传图片的方法,一直在本地放着,现在放出来给各位参考!

    话不多说直接上代码!!

    首先是html代码,可以使用循环进行多张上传,自己作一下处理就行。

    <div class="fileinp">
            <div class="upload">车左前方45度图片</div>
            <div class="uld">
                <div class="hide">
                    <input type="file" id="file-up" onchange="file(event)" class="file-up" title="">
                    <img class="instruction" id="instruction" src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2796968061,631869099&fm=26&gp=0.jpg" alt="">
                </div>
                <img class="instruction-pic" id="instruction-pic" src="" alt="">
                <img class="del" id="del" src="./img/1572853206(1).jpg" alt="">
            </div>
        </div>

    下面是js代码:

     function file (e) {
       var files = e.target.files[0];
       if (files && files.size) { 
           var size = files.size / 1000 / 1024;
           console.log(size);
           // 如果图片大于2M则重新上传,这里e.target.files[0].size单位是b
        //    if (size > 2) {
        //        alert('图片太大,请重新上传');
        //        return; 
        //    }
           // 如果上传的不是图片格式,提示请选择图片
           var rFilter = /^(?:image/bmp|image/cis-cod|image/gif|image/ief|image/jpeg|image/jpeg|image/jpeg|image/pipeg|image/png|image/svg+xml|image/tiff|image/x-cmu-raster|image/x-cmx|image/x-icon|image/x-portable-anymap|image/x-portable-bitmap|image/x-portable-graymap|image/x-portable-pixmap|image/x-rgb|image/x-xbitmap|image/x-xpixmap|image/x-xwindowdump)$/i;
           if (!rFilter.test(files.type)) {
               alert('请选择图片格式!');
               return;
           }
           var reader = new FileReader();
           reader.readAsDataURL(files);
           reader.onloadstart = function () {
               console.log('图片正在上传处理......');
           };
           //操作完成
           reader.onload = function(e) {
               suofang(reader.result, 3, returnBase)
               function returnBase (blob, Base) {
                    console.log(Base, blob);
                    $('.hide').hide()
                    $('.del').show()
                    $('.instruction-pic').show()
                    // file 对象的属性
                    $('.instruction-pic').attr('src', Base);
                    document.getElementById('file-up').value = null;
               }
               
           };
       }
    }
    function suofang (base64, bili, callback) {
                    console.log("执行缩放程序,bili=" + bili);
                    //处理缩放,转格式
                    var _img = new Image();
                    _img.src = base64;
                    _img.onload = function() {
                        var _canvas = document.createElement("canvas");
                        var w = this.width / bili;
                        var h = this.height / bili;
                        _canvas.setAttribute("width", w);
                        _canvas.setAttribute("height", h);
                        _canvas.getContext("2d").drawImage(this, 0, 0, w, h);
                        var base64 = _canvas.toDataURL("image/jpeg");
                        _canvas.toBlob(function(blob) {
                            console.log(blob.size);
                            if(blob.size > 1024*1024){
                                suofang(base64, bili, callback);
                            }else{
                                callback(blob, base64);
                            }
                        }, "image/jpeg");
                    }
                }
    $('#del').on('click', function(e) {
            console.log(666);
            $('.hide').show();
               $('.instruction-pic').attr('src', '');
            $('.instruction-pic').hide();
            $('.del').hide()
        })

    支持删除,重新上传,选择完图片会自动压缩,压缩的原理采用的是缩放。

    下面是html代码:

    * {
        margin: 0;
        padding: 0;
        outline: none;
    }
    .fileinp {
         100%;
        text-align: center;
    }
    .uld {
         100%;
        position: relative;
        height: 300px;
    }
    .file-up {
        position: absolute;
        top: 0;
        left: 0;
         100%;
        height: 300px;
        cursor: pointer;
        opacity: 0;
    }
    img {
         300px;
        height: 300px;
    }
    .instruction-pic {
        border: 1px solid #000;
        display: none;
    }
    .del {
        position: absolute;
        top: 0px;
        z-index: 99;
        left: 60%;
        display: none;
         30px;
        height: 30px;
    }

    代码中采用了jq的选择方法,可以引用jquery,也可以改成原生方法,谢谢!!!

  • 相关阅读:
    Objective-C代码规范
    Http中Get/Post请求区别
    使用Vitamio打造自己的Android万能播放器
    Vitamio
    图片瀑布流
    TCP与UDP
    SQLite基本操作总结
    IOS文件操作的两种方式:NSFileManager操作和流操作
    JSON和XML
    一些iOS常用的第三方库和控件及第三方框架还有动画
  • 原文地址:https://www.cnblogs.com/wgs-blog/p/12015070.html
Copyright © 2011-2022 走看看