zoukankan      html  css  js  c++  java
  • js对图片进行压缩

    摘抄自:https://www.cnblogs.com/dsn727455218/p/10489574.html
    记录。。。

    上传图片太大,可能会导致上传失败或者太久,可以对上传的图片进行压缩后在进行上传。

    首先,上传文件的input

        
    <input class="btn takepicture" type="file" name="img5q" id="img5q" accept="image/*"   onchange="javascript:setImagePreview(this,5);"/>

    js如下:

    /*
           三个参数
           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);
                }
    }
      
    function setImagePreview(e,a) {
      
        var fileMsg = e.files[0];
        if(fileMsg==null){
                    return;
        }
        //文件名
        var fileName = fileMsg.name;
        //大小 字节
        var fileSize = fileMsg.size;
      
        /*调用
        * fileMsg 是input type="file" 的值
        * quality 压缩图片质量 范围是(0-1)
        * base64Codes  就是最终压缩成的图片
        */
        photoCompress(fileMsg, {
            quality: 0.3
         }, function(base64Codes){
           //这里可以一个图片预览 把base64Codes 赋值给img的src即可
        });
    }
  • 相关阅读:
    【原创】MessageBox设置默认按钮
    探秘Win7计算器,这货不只是计算器
    android fill_parent和match_parent 的区别
    陈晓旭出家申明
    vi语法高亮
    EXTJS 常用控件的使用
    android平台下使用点九PNG技术
    【Android】附加Android源代码Androidandroid_gingerbread_javasrc
    ComboBox控件隐藏fieldLabel不能隐藏问题解决
    ScriptLoader.loadScripts cannot be called while the ScriptLoader is already loading scripts
  • 原文地址:https://www.cnblogs.com/syp1Blog/p/10899877.html
Copyright © 2011-2022 走看看