js(jquery-weui)前端压缩图片以及上传,python后台处理保存图片

此demo为大于1M对图片进行压缩上传(纯js的质量压缩,非长宽压缩)

若小于1M则原图上传,可以根据自己实际需求更改。

demo源码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
    <title>图片压缩上传</title>
    <link rel="stylesheet" href="../../static/css/weui.css"/>
    <link rel="stylesheet" href="../../static/css/example.css"/>
    <link rel="stylesheet" href="../../static/css/jquery-weui.css"/>

    <script src="../../static/js/example.js"></script>
    <script src="../../static/js/weui.min.js"></script>


</head>

<body>

    <div class="page">

                <div class="weui-gallery" id="gallery">
            <span class="weui-gallery__img" id="galleryImg"></span>
            <div class="weui-gallery__opr">
                <a href="javascript:" class="weui-gallery__del">
                    <i class="weui-icon-delete weui-icon_gallery-delete"></i>
                </a>
            </div>
        </div>

        <div class="weui-cells">

             <div class="weui-cell">
            <div class="weui-cell__bd">
                <p>
                     <span  id="" class="photo">我的照片 </span>
                    <ul class="weui-uploader__files" id="uploaderFiles" style="margin-top: 10px; display: none"></ul>
                    <div class="weui-uploader__input-box" style="margin-top: 10px">
                 <input id="uploaderInput" class="weui-uploader__input zjxfjs_file" type="file" accept="image/*" multiple="">
              </div>
                </p>
             </div>
            </div>

                </div>
        <div class="weui-btn-area">
       <a href="javascript:" class="weui-btn   weui-btn_primary" id="finish">上传</a>
    </div>
    </div>


</body>
</html>
<script src="../../static/js/zepto.min.js"></script>
<script type="text/javascript" src="../../static/js/mui.min.js"></script>
 <script type="text/javascript" src="../../static/js/jquery-2.2.4.min.js"></script>
 <script type="text/javascript" src="../../static/js/jquery-weui.js"></script>

<script type="text/javascript">
    mui.init();

    $(function () {
            var uid = $('.userid').attr('id');
            $gallery = $("#gallery");
            $galleryImg = $("#galleryImg");
            $uploaderInput = $("#uploaderInput");
            $uploaderFiles = $("#uploaderFiles");

           $uploaderInput.on("change", function(e) {
                  var src, url = window.URL || window.webkitURL || window.mozURL,
                files = e.target.files;
                for(var i = 0, len = files.length; i < len; ++i) {
                    var file = files[i];
                    if (url) {
                        src = url.createObjectURL(file);
                    } else {
                        src = e.target.result;
                    }

                    $("#finish").attr("disabled",true).css("pointer-events","none");
                    var tmpl = '<li class="weui-uploader__file" style="background-image:url(#url#);"></li>';
                    $('.weui-uploader__input-box').hide();
                    $uploaderFiles.show().append(tmpl.replace('#url#', src));

                    var Msize = (file.size/(1024*1024)).toFixed(2);
                    if(Msize > 1){
                           photoCompress(file, {
                               quality: 0.1
                         }, function(base64Codes){
                        var bl = convertBase64UrlToBlob(base64Codes);
                          var formData = new FormData();
                             formData.append('uid', uid);
                             formData.append('uploadImage', bl);
                            $.showLoading("上传中");
                             $.ajax({
                                        type:"POST",
                                        url: '{{ url_for('cp.upload_image') }}',
                                        data:formData,
                                        dataType:'json',
                                        contentType: false,
                                        processData: false,
                                        timeout: 7000,
                                        cache:false,
                                        success: function(data) {
                                            $.hideLoading();
                                        },
                                        error: function() {
                                            $.hideLoading();
                                            $.toast('换张图片试试吧', "forbidden");
                                             $uploaderFiles.hide().find("li").eq(0).remove();
                                        $('.weui-uploader__input-box').show();
                                        }

                                    });

                    });
                    }

                    else {
                         upload_file =  $uploaderInput[0].files[0];
                         var formData = new FormData();
                         formData.append('uid', uid);
                         formData.append('uploadImage', upload_file);
                         $.showLoading("上传中");
                         $.ajax({
                                    type:"POST",
                                    url: '{{ url_for('cp.upload_image') }}',
                                    data:formData,
                                    dataType:'json',
                                    contentType: false,
                                    processData: false,
                                    timeout: 7000,
                                    cache:false,
                                    success: function(data) {
                                        $.hideLoading();
                                    },
                                    error: function() {
                                        $.hideLoading();
                                        $.toast('换张图片试试吧', "forbidden");
                                         $uploaderFiles.hide().find("li").eq(0).remove();
                                        $('.weui-uploader__input-box').show();
                                    }

                                });
                    }



                }
            });

           //预览图片
        $uploaderFiles.on("click", "li", function() {
            $galleryImg.attr("style", this.getAttribute("style"));
            $gallery.fadeIn(100);
        });
        $gallery.on("click", function() {
            $gallery.fadeOut(100);
        });

        //删除图片
            $(".weui-gallery__del").click(function() {
                var index = $(this).index();
                $uploaderFiles.hide().find("li").eq(index).remove();
                $('.weui-uploader__input-box').show();
                 $('.photo').attr("id", "");
            });

        // 提交
         $('#finish').on("click", function () {
             var sign = $("#sign").val().trim();
             var image_url = $('.photo').attr('id');
             var has_image = $("#uploaderFiles").css('display');
             if(sign.length === 0 || has_image === 'none'){
                 $.toast("还没填完呢", "forbidden");
                 return false;
             }

             var formData = new FormData();
             var status = $('.page').attr('id');
             formData.append('status', status);
             formData.append('uid', uid);
             formData.append('sign', sign);
             formData.append('photo', image_url);
             $.showLoading("存档中");
             $.ajax({
                        type:"POST",
                        url: '{{ url_for('cp.supply') }}',
                        data:formData,
                        dataType:'json',
                        contentType: false,
                        processData: false,
                        timeout: 5000,
                        cache:false,
                        success: function(data) {
                            $.hideLoading();
                            $.toast('已保存');
                            location.href = "{{ url_for('cp.join_success') }}"
                        },
                        error: function() {
                            $.hideLoading();
                            $.toast('服务繁忙', "forbidden");
                        }

                    });

         })


    });

     /*
        三个参数
        file:一个是文件(类型是图片格式),
        w:一个是文件压缩的后宽度,宽度越小,字节越小
        objDiv:一个是容器或者回调函数
        photoCompress()
         */
        function photoCompress(file,w,objDiv){
            var ready=new FileReader();
            ready.readAsDataURL(file);
            ready.onload=function(){
                var re=this.result;
                canvasDataURL(re,w,objDiv)
            }
        }



    function canvasDataURL(path, obj, callback){
            var img = new Image();
            img.src = path;
            img.onload = function(){
                var that = this;
                // 默认按比例压缩
                var w = that.width,
                    h = that.height,
                    scale = w / h;
                {#w = obj.width || w;#}
                {#h = obj.height || (w / scale);#}
                var quality = 0.1;  // 默认图片质量为0.7
                //生成canvas
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                // 创建属性节点
                var anw = document.createAttribute("width");
                anw.nodeValue = w;
                var anh = document.createAttribute("height");
                anh.nodeValue = h;
                canvas.setAttributeNode(anw);
                canvas.setAttributeNode(anh);
                ctx.drawImage(that, 0, 0, w, h);
                // 图像质量
                if(obj.quality && obj.quality <= 1 && obj.quality > 0){
                    quality = obj.quality;
                }
                // quality值越小,所绘制出的图像越模糊
                var base64 = canvas.toDataURL('image/jpeg', quality);
                // 回调函数返回base64的值
                callback(base64);
            }
        }
        /**
         * 将以base64的图片url数据转换为Blob
         * @param urlData
         *            用url方式表示的base64图片数据
         */
        function convertBase64UrlToBlob(urlData){
            var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
            while(n--){
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], {type:mime});
        }



    </script>

python3 后台保存图片至服务器demo:


@cp.route('/upload_image', methods=["POST"])
def upload_image():
    if request.method == 'POST':
        uid = request.form.get('uid')
        image = request.files['uploadImage']
        image_index = uid + str(time.time()).split('.')[0] + secure_filename(image.filename)
        upload_path = os.path.join('./app/static/upload_images/', image_index)
        image.save(upload_path)
        image_url = upload_path.lstrip('./app/static/')
        return jsonify({'data': image_url})

参考原文:

https://www.cnblogs.com/007sx/p/7583202.html

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值