亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

canvas處理圖片后的小疑惑

canvas處理圖片后的小疑惑

慕桂英3389331 2018-12-25 21:15:36
就是一個利用canvas壓縮圖片的小功能,代碼如下:function compressImg(url){    var newimg=document.querySelector('.img');    var dataUrl='';    var size=url.length/1024-url.length/4096;    var scale=500/size;    if(size > 500){        var img = new Image();        img.src=url;        var canvas=document.createElement('canvas');        var ctx=canvas.getContext('2d');        img.onload=function(){            canvas.width=img.width;            canvas.height=img.height;            ctx.drawImage(img,0,0,canvas.width,canvas.height);            dataUrl=canvas.toDataURL('image/jpeg',scale);            //-----在此處可以正常獲取壓縮后的圖片        }    }else{        dataUrl=url    }           //------在此處打印dataUrl為''     newimg.src=dataUrl;}當圖片的大小大于500kb時,對圖片進行壓縮。在代碼中用了一個變量dataUrl來保存圖片,在實際操作過程中,發現當圖片大于500kb時,得到的dataUrl='',而在img.onload函數中可以正常獲取dataUrl,這是什么原因呢?為什么已經用變量保存了img加載完成的數據,為什么無法獲取到?
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

img.onload是一個異步方法,所以需要在該方法中獲取dataUrl

function compressImg(url){

    var newimg=document.querySelector('.img');

    var dataUrl='';

    var size=url.length/1024-url.length/4096;

    var scale=500/size;

    if(size > 500){

        var img = new Image();

        img.src=url;

        var canvas=document.createElement('canvas');

        var ctx=canvas.getContext('2d');

        img.onload=function(){

            canvas.width=img.width;

            canvas.height=img.height;

            ctx.drawImage(img,0,0,canvas.width,canvas.height);

            dataUrl=canvas.toDataURL('image/jpeg',scale);

            newimg.src=dataUrl;

        }

    }else{

        newimg.src=url

    }

}


查看完整回答
反對 回復 2019-01-07
  • 1 回答
  • 0 關注
  • 433 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號