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>
    

      

  • 相关阅读:
    雨林木风操作系统有感
    Bitcoin P2P 虚拟货币原理详解
    SVN switch 用法详解
    Bitcoin P2P 货币:有史以来最危险的项目
    回旋线科普
    Mathematica 如何绘制双纵坐标轴的图像?
    c#数据库操作
    在自定义HttpHandler中无法使用Session
    VS2010安装因net framework4.0无法安装而失败的解决方法
    .net framework 4.0 0xc8000247错误解决
  • 原文地址:https://www.cnblogs.com/ainidewen/p/8806272.html
Copyright © 2011-2022 走看看