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

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>上传文件</title>
        <script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
        <script type="text/javascript">
            /*
            三个参数
            file:一个是文件(类型是图片格式),
            w:一个是文件压缩的后宽度,宽度越小,字节越小
            objDiv:一个是容器或者回调函数
            photoCompress()
            */
            function photoCompress(file, w, objDiv) {
                var ready = new FileReader();
                /*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/
                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.7;  // 默认图片质量为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 });
            }
    
    
          
            //上传文件方法
            function UpladFile() {
                var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
    
                photoCompress(fileObj, {
                   1000
                }, function (base64Codes) {
                    jQuery.ajax({
                        async: true,
                        type: "POST", //用POST方式传输
                        dataType: "text", //数据格式:JSON
                        url: 'http://localhost:804/Ajax/APIS.ashx?time=' + new Date().getMilliseconds(), //目标地址
                        data: "base64=" + base64Codes + "&action=ajaxFileUpload",
                        success: function (msg) {
                            alert(msg);
                        }
    
                    });
                });
    
            }
    
           
    
           
        </script>
    </head>
    <body>
    使用canvas形式压缩图片并上传:
    <span id="percentage"></span><span id="time"></span>
    <br /><br />
    <input type="file" id="file" name="myfile" accept="image/x-png, image/jpg, image/jpeg, image/gif"/>
    <input type="button" onclick="UpladFile()" value="上传" />
    </body>
    </html>
    

      

  • 相关阅读:
    ios开发,NSFileManager的使用
    iOS开发-常用第三方开源框架介绍(绝对够你用了)
    iOS开发常用第三方开源框架
    对佛学和个人发展的思考总结(十八)心流、非人情网络、穷人、人生机会、平衡计分卡
    php 判断字符串中包含重复相同的次数 array_count_values str_split max 函数组合使用
    存储过程一次性返回多个数据集,逻辑层与前端处理
    动态改变div背景颜色
    在asp.net mvc应用中使用vue.js
    angularjs单一页面中高频访问相同web api,出现阻塞和等待
    Windows安装配置OpenGrok
  • 原文地址:https://www.cnblogs.com/ainidewen/p/8806272.html
Copyright © 2011-2022 走看看