• 利用HTML5,前端js实现图片压缩


    http://blog.csdn.NET/qazwsx2345/article/details/21827553

    主要用了两个HTML5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。

    照片是自己用单反拍的,5M多,压缩下面3张分别是600多kb,400多kb,300kb的最后那张失真度很大了,压缩效率蛮高的。

    <!DOCTYPE html>  
    <html>  
    <head>  
        <meta charset="utf-8"/>  
        <title>File API Test</title>  
        <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>  
        <script type="text/javascript" src="js/JIC.js"></script>  
        <style>  
            #test{  
                display: none;  
            }  
        </style>  
    </head>  
    <body>  
    <input type="file" id="fileImg" >  
    <form>  
        <img src="" id="test" alt="">  
    </form>  
    <script>  
        function handleFileSelect (evt) {  
            // var filebtn = document.getElementById(id);  
            // console.log(filebtn);  
            // var files = filebtn.target.files;  
            // console.log(filebtn.target);  
            // console.log(files);  
            var files = evt.target.files;  
            for (var i = 0, f; f = files[i]; i++) {  
       
              // Only process image files.  
              if (!f.type.match('image.*')) {  
                continue;  
              }  
       
              var reader = new FileReader();  
       
              // Closure to capture the file information.  
              reader.onload = (function(theFile) {  
                return function(e) {  
                  // Render thumbnail.  
                  // console.log(evt.target.files[0]);  
                  // console.log(e.target);  
                  console.log(e.target.result);  
                  var i = document.getElementById("test");  
                  i.src = event.target.result;  
                  console.log($(i).width());  
                  console.log($(i).height());  
                  $(i).css('width',$(i).width()/10+'px');  
                  //$(i).css('height',$(i).height()/10+'px');  
                  console.log($(i).width());  
                  console.log($(i).height());  
                  var quality =  50;  
                  i.src = jic.compress(i,quality).src;  
                  console.log(i.src);  
                  i.style.display = "block";  
                };  
              })(f);  
       
              // Read in the image file as a data URL.  
              reader.readAsDataURL(f);  
            }  
          }  
       
        document.getElementById('fileImg').addEventListener('change', handleFileSelect, false);  
    </script>  
    </body>  
    </html>  
       
      
    var jic = {  
            /**  
             * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed  
             * @param {Image} source_img_obj The source Image Object  
             * @param {Integer} quality The output quality of Image Object  
             * @return {Image} result_image_obj The compressed Image Object  
             */  
       
            compress: function(source_img_obj, quality, output_format){  
                   
                 var mime_type = "image/jpeg";  
                 if(output_format!=undefined && output_format=="png"){  
                    mime_type = "image/png";  
                 }  
                   
       
                 var cvs = document.createElement('canvas');  
                 //naturalWidth真实图片的宽度  
                 cvs.width = source_img_obj.naturalWidth;  
                 cvs.height = source_img_obj.naturalHeight;  
                 var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0);  
                 var newImageData = cvs.toDataURL(mime_type, quality/100);  
                 var result_image_obj = new Image();  
                 result_image_obj.src = newImageData;  
                 return result_image_obj;  
            },  
           function   ****(***){}  
    } 
  • 相关阅读:
    Android:日常学习笔记(7)———探究UI开发(1)
    Android:日常学习笔记(6)——探究活动(4)
    JavaScript:基础扩展(1)——JSON
    JavaScript:学习笔记(3)——正则表达式的应用
    正则表达式:快速入门
    LeetCode_Easy_471:Number Complement
    Java实现——字符串分割以及复制目录下的所有文件
    DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比
    一个简单电商网站开发过程中的业务资料整理
    大道至简,不简则死
  • 原文地址:https://www.cnblogs.com/dhcn/p/7120725.html
Copyright © 2020-2023  润新知