【问题标题】:Adding background to transparent image为透明图像添加背景
【发布时间】:2016-06-21 08:20:30
【问题描述】:

我需要将我在画布中创建的图表导出为图像文件。我设法做到了,但图像是透明的(没有背景)。我的问题是,有没有办法通过代码为我从画布获得的现有图像添加背景颜色?

例子:

浏览器中的画布:

导出为 .png 时的画布:

【问题讨论】:

  • 为您的画布添加背景颜色?
  • 如何导出图像?任何可以测试的示例代码?
  • 在绘制图表之前,您是否尝试过fillRect 用白色画布?
  • 在 cmmorrissey 试过这个,它不起作用?在 Rayon https://www.youtube.com/watch?v=wokNS9EdKbA at bviale canvas 会覆盖任何 fillRect 效果

标签: javascript php css html canvas


【解决方案1】:

您有多种方式来完成您的任务。

到目前为止,最简单的方法是在开始绘制图表之前用背景颜色填充整个画布。 提示:您不显示代码,但如果可能,请执行此简单的解决方案。 ;=)

context.fillStyle='white';
context.fillRect(0,0,canvas.width,canvas.height)

如果你不能在开始前填写,你还有一些选择。

您可以将图表保存到另一个画布,用背景色填充整个主画布,然后将保存的图表重新绘制回主画布。

// create a second canvas and draw the chart onto it
var secondCanvas=document.createElement('canvas');
var cctx=secondCanvas.getContext('2d');
secondCanvas.width=canvas.width;
secondCanvas.height=canvas.height;
cctx.drawImage(mainCanvas,0,0);

// fill the main canvas with a background
context.fillStyle='white';
context.fillRect(0,0,canvas.width,canvas.height)

// redraw the saved chart back to the main canvas
context.drawImage(secondCanvas,0,0);

您可以使用合成来在现有像素之后绘制新图形。绘制整个背景,它将出现在现有图表的后面。

// set compositing to draw all new pixels (background) UNDER
// the existing chart pixels
context.globalCompositeOperation='destination-over';

// fill the main canvas with a background
context.fillStyle='white';
context.fillRect(0,0,canvas.width,canvas.height)

// always clean up ... reset compositing to default
context.globalCompositeOperation='source-over';

【讨论】:

  • 感谢您的描述性回答!
【解决方案2】:

无需使用 JavaScript,只需使用 CSS 为图像设置背景色即可。

<style>
    img {
        background-color: black;
    }
</style>
<img src="...">

请参阅此 JSFiddle 以获取另一个示例:https://jsfiddle.net/3jch7z94/1/

【讨论】:

  • 您有一个很好的计划,可以在屏幕上显示带有背景的图表。但是,CSS 背景在导出到图像文件后不会显示在画布上。要显示背景颜色,必须将它们与图表一起绘制到画布元素上。 :-)
  • @markE 他说他已经导出了他的画布,并且导出时它具有透明背景。如果问题不准确并且图像实际上具有不透明的背景,那么显然这是行不通的。
猜你喜欢
  • 2013-06-28
  • 2017-04-24
  • 1970-01-01
  • 2010-12-14
  • 2016-12-08
  • 1970-01-01
  • 2020-09-13
  • 2016-12-26
  • 2011-09-15
相关资源
最近更新 更多