解决canvas转base64/jpeg时透明区域变成黑色背景的方法

2020-04-21 07:51:34易采站长站整理

        });   
    }, false);   
  
    // 获取canvas的base64图片的dataURL(图片格式为image/jpeg)   
    function getBase64(canvas, callback) {   
        var dataURL = canvas.toDataURL("image/jpeg");   
  
        if(typeof callback !== undefined) {   
            callback(dataURL);   
        }   
    }   
</script>  

效果如下:

缺点显而易见。当png图片上存在半透明区域时,会将其填充为黑色。这是我们不希望的。

解决方案二:在canvas绘制前填充白色背景

核心代码如下:

JavaScript Code复制内容到剪贴板

// 在canvas绘制前填充白色背景   
context.fillStyle = "#fff";   
context.fillRect(0, 0, canvas.width, canvas.height);  

完整代码如下:

XML/HTML Code复制内容到剪贴板

<p>Canvas:</p>  
<canvas id="canvas" style="border: 1px solid #ccc;"></canvas>  
<br>  
<p>Base64转码后的图片:</p>  
<div id="base64Img"></div>  
  
<script type="text/javascript">  
    var base64Img = document.getElementById("base64Img"),   
        canvas = document.getElementById("canvas"),   
        context = canvas.getContext("2d");   
  
    // 创建新图片   
    var img = new Image();   
    img.src = "1.png";   
  
    img.addEventListener("load", function() {   
        // 绘制图片到canvas上   
        canvas.width = img.width;   
        canvas.height = img.height;