图片base64格式 压缩

网上一通百度找了几个小时,总算是搞出来了,话不多说,直接上代码

//第一个参数就是原来的字符串,第二个是宽度,第三个就是回调方法
function cutImageBase64(base64, w, callback) {
            var newImage = new Image();
            var quality = 0.6;    //压缩系数0-1之间
            newImage.src = base64;
            newImage.setAttribute("crossOrigin", 'Anonymous');  //url为外域时需要
            var imgWidth, imgHeight;
            newImage.onload = function () {
                imgWidth = this.width;
                imgHeight = this.height;
                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");
                if (Math.max(imgWidth, imgHeight) > w) {
                    if (imgWidth > imgHeight) {
                        canvas.width = w;
                        canvas.height = w * imgHeight / imgWidth;
                    } else {
                        canvas.height = w;
                        canvas.width = w * imgWidth / imgHeight;
                    }
                } else {
                    canvas.width = imgWidth;
                    canvas.height = imgHeight;
                    quality = 0.6;
                }
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
                var base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句
                // 如想确保图片压缩到自己想要的尺寸,如要求在50-150kb之间,请加以下语句,quality初始值根据情况自定
                while (base64.length / 1024 > 150) {
                    quality -= 0.01;
                    base64 = canvas.toDataURL("image/jpeg", quality);
                }
                // 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑
                while (base64.length / 1024 < 50) {
                    quality += 0.001;
                    base64 = canvas.toDataURL("image/jpeg", quality);
                }
                callback(base64);//必须通过回调函数返回,否则无法及时拿到该值
            }
        }

使用
html代码

<div id="preview">
            <input type="file"  id="file" value="" onchange="imgss(event)" />
            <img id="imgs" />
</div>
function imgss(e){
            let imgs=document.getElementById("imgs");
            var file = e.target.files[0];                
                // 确认选择的文件是图片                
                if(file.type.indexOf("image") == 0) {
                    var reader = new FileReader();
                    reader.readAsDataURL(file);                    
                    reader.onload = function(e) {
                        // 图片base64化
                  var newUrl = this.result;
                        
                        //这是原来的base64格式字符串
            var base64= newUrl;
                        
            //调用方法
            cutImageBase64(base64, 500, Imgbas);
                         
            //在这里根据回调回来的数据打印
            function Imgbas(base64) {
                console.log(base64);
            }

         };
      }
 }

这样就可以了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一个上传头像的功能,后端给的接口可以接收base64格式的,用的UI框架是vant-ui,需求和准备大概就这样,如...
    小虾米前端阅读 9,158评论 0 0
  • 这段时间我对篮球越发喜欢,昨天和宿友一起举办了一场比赛,比赛时和队友一起和对手竞争,真的感到很热血,篮球这项运动很...
    jia蔚快跑阅读 1,852评论 0 0
  • 关于社交领域之争,从来不只是巨头之间的事情!各种创业者如潮水般涌入退去,反复以往!然而不管竞争如何激烈,却一直很难...
    剑指颓唐阅读 4,481评论 2 6
  • 家庭教育的重要性: 一:家庭是孩子的第一学校,父母是孩子的第一任老师; 二:家庭教育是教育孩子的起点和基点; 三:...
    潼妈_tong阅读 2,415评论 0 2
  • 得知自己以后不能再跳舞的消息时,我整整一周没有吃东西,妈妈走了,梦想走了,让我觉得我的人生已经到这里了,说不定什么...
    禾尔阅读 1,729评论 0 1