首页前端开发HTML解决canvas转base64/jpeg时透明区域变成黑色背景的方法

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

时间2024-05-19 23:06:03发布访客分类HTML浏览92
导读:代码如下: XML/HTML Code复制内容到剪贴板 ˂p˃Canvas:˂/p˃ ˂canvasid="canvas"style="border:1pxsolid#ccc;"˃˂/canvas˃ ˂br˃...

代码如下:

XML/HTML Code复制内容到剪贴板
  1. Canvas:
  2. Base64转码后的图片:
  3. varbase64Img=document.getElementById("base64Img"),
  4. canvas=document.getElementById("canvas"),
  5. context=canvas.getContext("2d");
  6. //创建新图片
  7. varimg=newImage();
  8. img.src="1.png";
  9. img.addEventListener("load",function(){
  10. //绘制图片到canvas上
  11. canvas.width=img.width;
  12. canvas.height=img.height;
  13. context.drawImage(img,0,0);
  14. getBase64(canvas,function(dataUrl){
  15. //展示base64位的图片
  16. varnewImg=document.createElement("img");
  17. newImg.src=dataUrl;
  18. base64Img.appendChild(newImg);
  19. } );
  20. } ,false);
  21. //获取canvas的base64图片的dataURL(图片格式为image/jpeg)
  22. functiongetBase64(canvas,callback){
  23. vardataURL=canvas.toDataURL("image/jpeg");
  24. if(typeofcallback!==undefined){
  25. callback(dataURL);
  26. }
  27. }

效果如下:

为什么canvas会png的透明区域转成黑色呢?

canvas转换成jpeg之前移除alpha通道,所以透明区域被填充成了黑色。

但是,我们希望的是,canvas可以将png的透明区域填充成白色。

那么怎么将canvas中的透明区域填充成白色呢?

以下是我实践过的两种解决方案,希望对你有帮助。

解决方案一:将透明的pixel设成白色

因为png图片的背景都是透明的,所以我们可以寻找透明的pixel,然后将其全部设置成白色,核心代码如下:

JavaScript Code复制内容到剪贴板
  1. //将canvas的透明背景设置成白色
  2. varimageData=context.getImageData(0,0,canvas.width,canvas.height);
  3. for(vari=0; i

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 解决canvas转base64/jpeg时透明区域变成黑色背景的方法
本文地址: https://pptw.com/jishu/663746.html
没有基础如何快速学习HTML5开发 零基础如何入门HTML5 HTML5中文环保企业自适应网站模板免费下载

游客 回复需填写必要信息