如何在 html2canvas 中使透明颜色变为白色而不是黑色?

Posted

技术标签:

【中文标题】如何在 html2canvas 中使透明颜色变为白色而不是黑色?【英文标题】:How to make transparent color white instead of black in html2canvas? 【发布时间】:2013-01-13 03:27:12 【问题描述】:

我正在尝试使用 html2canvas 截屏:

var body = document.getElementById("body")
$(body).html2canvas(onrendered: function( canvas )   
     var urlData = canvas.toDataURL("image/jpeg");  
);

我的身体背景是透明的,因此 urlData 因为 jpeg 有黑色背景(不像浏览器中的白色)。 在这种情况下,如何解决此问题并将背景颜色设为白色?

【问题讨论】:

【参考方案1】:

我修改了临时:_html2canvas.Util.isTransparent 来自

_html2canvas.Util.isTransparent = function(backgroundColor) 
  return (backgroundColor === "transparent" || backgroundColor === "rgba(0, 0, 0, 0)");
;

_html2canvas.Util.isTransparent = function(backgroundColor) return (backgroundColor === "transparent" || backgroundColor === "rgba(0, 0, 0, 0)" || backgroundColor === undefined); ;

然后调用带有背景参数集的html2canvas就足够了:

html2canvas(screenshot_element, 
    background :'#FFFFFF',
    onrendered: function (canvas) 
      .....
    
  );

对我来说......将透明背景视为未定义的背景是有意义的。

【讨论】:

很好的答案。它为我节省了很多时间。谢谢。 很棒的答案。非常感谢@CRK 在 html2canvas 代码示例中不应该是“backgroundColor”而不是“background”吗?【参考方案2】:

试试这个

var body = document.getElementById("body") 
$(body).html2canvas(background:'#fff', onrendered: function( canvas )   
 var urlData = canvas.toDataURL("image/jpeg");  
);

【讨论】:

谢谢,这里是完整的代码:function Snapshot() html2canvas(document.body, background:'#fff', onrendered: function(canvas) var a = document.createElement(' a'); a.href = canvas.toDataURL("image/jpeg", 0.9).replace("image/jpeg", "image/octet-stream"); a.download = 'snapshot.jpg'; a.点击(); ); 【参考方案3】:

我想说,现在更简单了(30/05/18) - 只需在 html2canvas 选项中传递 backgroundColor: null :

html2canvas(
    document.querySelector("#some-id-to-export"),
    backgroundColor: null
).then(canvas => $("#id-to-render-transparent-bg-img").html(canvas););

【讨论】:

【参考方案4】:

https://***.com/a/23928038/1815624

只需将 css background-color:#ffffff 添加到您的表格中即可:)

希望对你有帮助

我将内容包装到每个所需页面的 div 中,并提供 class="pdfpage" 然后将 css 设置为 pdfpagebackground:#FFFFFF;

正如我所评论的,我需要将渲染元素的背景设置为白色并不是第一个想法,因为它已经是白色了......但实际上它是无色的......

【讨论】:

【参考方案5】:
var body = document.getElementById("body")
$(body).html2canvas(onrendered: function( canvas )   
     var urlData = canvas.toDataURL("image/jpeg");  
,
background: '#fff');

两年后但更新的版本应该接受这样的参数。 . .

【讨论】:

【参考方案6】:

不用担心,现在只需添加背景:'#FFFFFF',它工作正常

                   html2canvas(element, 
                       background: '#FFFFFF',
                       onrendered: function (canvas) 
                           $("#previewImage").append(canvas);
                           getCanvas = canvas;
                       
                   );

【讨论】:

【参考方案7】:

如果您需要实际的图像数据不透明,请将 fillRect(0, 0, width, height) 与 fillStyle 'white' 结合使用。

另一种方法是使用 getImageData 和 putImageData 并迭代抛出每个像素来检查 rgba 值并更改它们,但它很慢(可能是几毫秒)

【讨论】:

【参考方案8】:

html2Canvas 和 ngxcharts 团队似乎已经关闭了这个问题上的错误,但没有提供任何解决方案。 通过 css 类为 rect 设置填充属性不起作用。

这就是我最终解决它的方式,令人惊讶的是它有效:

 let rectElements = Array.from(document.getElementsByTagName('rect'));
  if (rectElements.length > 0) 
    rectElements.forEach(rect => 
      rect.setAttribute('fill', '#ffffff');
    );
  

【讨论】:

以上是关于如何在 html2canvas 中使透明颜色变为白色而不是黑色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在listview android中使文本颜色透明?

如何在 Vuetify 中使 Appbar 背景颜色透明

如何在 BufferedImage 中使颜色透明并另存为 PNG

如何在Android Studio中使图像中的特定颜色透明?

如何在本机反应中使状态栏透明?

从黑色到完全透明的快速渐变