canvas压缩图片获取的base64显示图片时有黑色,而且图片显示不全

有的时候图片会黑一点有的时候会全黑,我看代码没看出哪里出了毛病希望大神帮我解答
//---------------------------身份证上传--------------------------

//document.getElementById('img').addEventListener('change', function() {
$('#img_wrapper').on('change','.input_img',function(){
    var reader = new FileReader();
    var that = this;
    var nodeId = $(this).parent().parent().attr('id');
    reader.onload = function (e) {
        console.log('图片已生成');
        //console.log(e.target.result);
        compress(e.target.result, fileSize,nodeId);
        compress_show(e.target.result, fileSize,nodeId,that);
    };
    reader.readAsDataURL(this.files[0]);
    var fileSize = Math.round(this.files[0].size / 1024 / 1024); //以M为单位
});

//图片压缩
function compress(res, fileSize,nodeId) { //res代表上传的图片,fileSize大小图片的大小

    console.log('图片开始压缩');
    var img = new Image(),
        maxW = $("#sfzm").width() * 3, //设置最大宽度
        maxH = $("#sfzm").height() * 3; //设置最大高度
    console.log(9999);
    img.onload = function() {
        var cvs = document.createElement('canvas'),
            ctx = cvs.getContext('2d');
        if(img.width > maxW) {
            img.height *= maxW / img.width;
            img.width = maxW;
        } else {
            img.width *= maxH / img.height;
            img.height = maxH;
        }
        cvs.width = img.width;
        cvs.height = img.height;

        ctx.clearRect(0, 0, cvs.width, cvs.height);
        ctx.drawImage(img, 0, 0, img.width, img.height);

        var compressRate = getCompressRate(1, fileSize);

        var dataUrl = cvs.toDataURL('image/jpeg', compressRate).replace('data:image/jpeg;base64,','');



        selectPicture(nodeId,dataUrl);

        console.log(cvs);

    }
    img.src = res;

}

//压缩比率

function getCompressRate(allowMaxSize, fileSize) { //计算压缩比率,size单位为MB
    var compressRate = 1;
    if(fileSize / allowMaxSize > 4) {
        compressRate = 0.5;
    } else if(fileSize / allowMaxSize > 3) {
        compressRate = 0.6;
    } else if(fileSize / allowMaxSize > 2) {
        compressRate = 0.7;
    } else if(fileSize > allowMaxSize) {
        compressRate = 0.8;
    } else {
        compressRate = 0.9;
    }
    console.log(compressRate);
    return compressRate;
}
阅读 4.9k
1 个回答
新手上路,请多包涵

请问你遇到的问题解决了没有?是什么原因呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题