美文网首页图片上传
h5图片上传预览压缩

h5图片上传预览压缩

作者: 银角大王__ | 来源:发表于2019-05-24 16:32 被阅读0次

    图片压缩预览上传

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script>
            // rem
            (function (doc, win) {
                var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
                    recalc = function () {
                        var clientWidth = docEl.clientWidth;
                        if (!clientWidth) return;
                        if (clientWidth >= 750) {
                            docEl.style.fontSize = '100px';
                        }
                        else {
                            docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
                        }
                    };
                if (!doc.addEventListener) return;
                win.addEventListener(resizeEvt, recalc, false);
                doc.addEventListener('DOMContentLoaded', recalc, false);
            })(document, window);
        </script>
        <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <title>图片上传预览压缩</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            ul, li {
                list-style: none;
            }
    
            @font-face {
                font-family: 'iconfont';  /* project id 1209692 */
                src: url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.eot');
                src: url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.eot?#iefix') format('embedded-opentype'),
                url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.woff2') format('woff2'),
                url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.woff') format('woff'),
                url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.ttf') format('truetype'),
                url('//at.alicdn.com/t/font_1209692_3jqapk24q4n.svg#iconfont') format('svg');
            }
    
            .iconfont {
                font-family: "iconfont" !important;
                font-size: 16px;
                font-style: normal;
                -webkit-font-smoothing: antialiased;
                -webkit-text-stroke-width: 0.2px;
                -moz-osx-font-smoothing: grayscale;
            }
    
            .clearfix:after {
                content: "";
                display: block;
                height: 0;
                clear: both;
                visibility: hidden;
                overflow: hidden;
            }
    
            .clearfix {
                *zoom: 1;
            }
    
            .load {
                position: relative;
                top: 0;
                left: 0;
                width: 2rem;
                height: 2rem;
                text-align: center;
                line-height: 2rem;
                border-radius: .1rem;
                border: 1px dashed #cccccc;
                color: #cccccc;
                font-size: .2rem;
    
            }
    
            input {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                opacity: 0;
            }
    
            ul {
                margin: 0 auto;
            }
    
            ul > li {
                float: left;
                width: 2rem;
                height: 2rem;
                overflow: hidden;
                border-radius: .2rem;
                position: relative;
                margin: .1rem;
            }
    
            li > img {
                height: 2rem;
                width: 2rem;
            }
    
            li > i {
                display: block;
                position: absolute;
                top: 0;
                right: 0;
                width: .4rem;
                height: .4rem;
                line-height: .4rem;
                background: rgba(0, 0, 0, 0.4);
                color: #FFFFFF;
                font-size: .4rem;
            }
    
            .btn {
                margin: .2rem auto;
                border-radius: .1rem;
                width: 5.2rem;
                height: .68rem;
                line-height: .68rem;
                background: #fc6c00;
                color: #FFFFFF;
                font-size: .3rem;
                text-align: center;
            }
    
        </style>
    </head>
    <body>
    
    <div id="app">
    
    
        <ul class="clearfix">
            <li v-for="(p,index) in imgArr">
                <img class="item" :src=p alt="">
                <i @click="delImg(index)" class="iconfont">&#xe613;</i>
            </li>
            <li class="load">
                上传图片
                <input type="file" name="" id="form" @change="uploadIMG">
            </li>
        </ul>
    
        <div class="btn" @click="uploadImg()">
            上传
        </div>
    
    </div>
    
    <script>
        var vm = new Vue({
            el: '#app',
            data() {
                return {
                    imgArr: []
                }
            },
            methods: {
                uploadIMG: function (e) {
                    // 读取图片信息
                   //  let files =  e.files[0]  // pc端用法
                    let files = e.target.files || e.dataTransfer.files;
                    if (!files.length) return;
                    let picture = files[0];
                    // console.log(files.length,picture, picture.size / 1024);
                    if (picture.size / 1024 > 5000) {
                        alert("图片太大 无法上传");
                    } else {
                        this.imgPreview(picture);
                    }
                },
                imgPreview: function (file, callback) {
                    let that = this;
                    //判断支不支持FileReader
                    if (!file || !window.FileReader) return;
                    if (/^image/.test(file.type)) {
                        //创建一个reader
                        let reader = new FileReader();
    
                        //将图片转成base64格式
                        reader.readAsDataURL(file);
                        //读取成功后的回调
                        reader.onloadend = function () {
                            let result = this.result;
                            let img = new Image();
                            img.src = result;
                            //  console.log("*未压缩前的图片大小*",result.length);
                            img.onload = function () {
                                let data = that.compress(img);
                                that.imgArr.push(data);
    
                                
                                 // base64转成bolb
                               // let blob = that.dataURItoBlob(data);
                               // console.log("**base64转blob对象*",blob);
                               // var formData = new FormData();
                               // formData.append("file", blob);
                               // console.log("*将blob对象转成formData对象*",formData.get("file"));
    
                            };
                            console.log(that.imgArr)
                        };
    
    
                    }
                },
                // 压缩图片
                compress: function (img) {
                    let canvas = document.createElement("canvas");
                    let ctx = canvas.getContext("2d");
                    let initSize = img.src.length;
                    let width = img.width;
                    let height = img.height;
                    canvas.width = width;
                    canvas.height = height;
                    // 铺底色
                    ctx.fillStyle = "#fff";
                    ctx.fillRect(0, 0, canvas.width, canvas.height);
                    ctx.drawImage(img, 0, 0, width, height);
    
                    //进行压缩
                    let ndata = canvas.toDataURL("image/jpeg", 0.2);
                    //console.log("*******压缩后的图片大小*******",ndata);
    
                    return ndata;
                },
                // base64转成bolb对象
                dataURItoBlob:function(base64Data) {
                    var byteString;
                    if (base64Data.split(",")[0].indexOf("base64") >= 0)
                        byteString = atob(base64Data.split(",")[1]);
                    else byteString = unescape(base64Data.split(",")[1]);
                    var mimeString = base64Data
                        .split(",")[0]
                        .split(":")[1]
                        .split(";")[0];
                    var ia = new Uint8Array(byteString.length);
                    for (var i = 0; i < byteString.length; i++) {
                        ia[i] = byteString.charCodeAt(i);
                    }
                    return new Blob([ia], {type: mimeString});
                },
                delImg(n) {
                    console.log(n)
                    this.imgArr.splice(n, 1);
                },
                uploadImg() {
                    // 上传图片
                    if(this.imgArr.length<=0){
                        alert("请添加图片");
                        return
                    }
                    axios.get('/接口地址', {
                        params: {
                            imgArr: this.imgArr
                        }
                    }).then(success=> {
                            console.log("请求成功",success);
                        }).catch(error=> {
                            console.log("请求失败",error);
                        });
                }
            }
        })
    
    </script>
    </body>
    </html>
    

    欢迎纠错 ~

    相关文章

      网友评论

        本文标题:h5图片上传预览压缩

        本文链接:https://www.haomeiwen.com/subject/kcvvzqtx.html