20

我正在尝试使用 html2canvas 截屏:

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

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

4

8 回答 8

20

我修改了临时: _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) {
      .....
    }
  });

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

于 2014-09-15T06:33:05.707 回答
10

试试这个

var body = document.getElementById("body") 
$(body).html2canvas({background:'#fff', onrendered: function( canvas ) {  
 var urlData = canvas.toDataURL("image/jpeg");  
}});
于 2013-03-17T17:51:04.760 回答
7

我想说,现在更简单了(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);});
于 2018-05-30T10:57:05.517 回答
6

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

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

希望这可以帮助

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

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

于 2014-08-23T01:22:40.970 回答
1
var body = document.getElementById("body")
$(body).html2canvas({onrendered: function( canvas ) {  
     var urlData = canvas.toDataURL("image/jpeg");  
},
background: '#fff'});

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

于 2016-08-29T19:14:22.033 回答
1

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

                   html2canvas(element, {
                       background: '#FFFFFF',
                       onrendered: function (canvas) {
                           $("#previewImage").append(canvas);
                           getCanvas = canvas;
                       }
                   });
于 2018-08-15T10:04:07.333 回答
0

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

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

于 2019-02-21T17:17:28.057 回答
0

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

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

 let rectElements = Array.from(document.getElementsByTagName('rect'));
  if (rectElements.length > 0) {
    rectElements.forEach(rect => {
      rect.setAttribute('fill', '#ffffff');
    });
  }
于 2019-06-06T06:32:29.313 回答