zoukankan      html  css  js  c++  java
  • Js利用Canvas实现图片压缩

    最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:

    /* 
     * 图片压缩
     * img       原始图片
     * width     压缩后的宽度
     * height    压缩后的高度
     * ratio     压缩比率 
     */
     function compress(img, width, height, ratio) {                
          var canvas, ctx, img64;
                    
          canvas = document.createElement('canvas');                
          canvas.width = width;
          canvas.height = height;
                    
          ctx = canvas.getContext("2d");                
          ctx.drawImage(img, 0, 0, width, height);
                    
          img64 = canvas.toDataURL("image/jpeg", ratio);
                    
          return img64;
     }

    上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

    var image = new Image();
    image.src = "/img/test.jpg";
                
    image.onload = function(){
        var img64 = compress(image, 500, 400, 0.7);
        document.getElementById("test").src = img64;
    }

    注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

  • 相关阅读:
    ReactJS入门学习一
    js控制html5 【video】标签中视频的播放和停止
    CentOS中vsftp安装与配置
    linux 添加多个网段
    js图片预加载后触发操作
    nodejs在后台运行
    asp.net环境搭建
    aspx aspx.cs
    linux 添加静态ip dns
    kali ssh服务开启登录
  • 原文地址:https://www.cnblogs.com/similar/p/7509012.html
Copyright © 2011-2022 走看看