【问题标题】:How can I make background color of canvas white with JavaScript?如何使用 JavaScript 将画布的背景颜色设为白色?
【发布时间】:2024-04-17 22:05:02
【问题描述】:

我想做什么

我想知道如何使背景颜色变白。

我用画布构建了一个绘图应用程序。您可以通过单击“下载”按钮下载您绘制的画布图像。但是它的背景颜色是黑色的(技术上是透明的)。

如何将其更改为白色?


我尝试了什么

我将以下代码添加到我的代码中,但效果不佳。我什么都画不出来。

ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, canvas.width, canvas.height);

这是我的代码

const canvas = document.querySelector('#draw');
const ctx = canvas.getContext('2d');
ctx.strokeStyle = '#BADA55';

  ...

function draw(e) {
  if (!isDrawing) return;
  console.log(e);
  ctx.strokeStyle = `hsl(${hue}, 100%, 50%)`;
  ctx.beginPath();
  ctx.moveTo(lastX, lastY);
  ctx.lineTo(e.offsetX, e.offsetY);
  ctx.stroke();
  [lastX, lastY] = [e.offsetX, e.offsetY];

  ...

}

canvas.addEventListener('mousedown', (e) => {
  isDrawing = true;
  [lastX, lastY] = [e.offsetX, e.offsetY];
});

canvas.addEventListener('mousemove', draw);

  ...

downloadBtn.addEventListener('click', downloadImage);
function downloadImage() {
  if (canvas.msToBlob) {
    const blob = canvas.msToBlob();
    window.navigator.msSaveBlob(blob, filename);
  } else {
      downloadLink.href = canvas.toDataURL('image/png');
      downloadLink.download = filename;
      downloadLink.click();
  }
}

我想把下载图片的背景色设为白色。

【问题讨论】:

  • 您尝试了ctx.fillRect(),但它不在您的代码中。你把它放在哪里了?
  • 我删除了 ctx.fillRect()。稍后我将发布包含更多详细信息的相同问题,因为我仍然没有权限编辑我的问题。
  • 你是什么意思你没有edit你的问题的特权。这不是特权,在 1 rep 你已经可以了。以此为由关闭另一个。

标签: javascript canvas


【解决方案1】:

您可以使用以下代码设置画布的背景颜色。

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillStyle = "green";
context.fillRect(0, 0, canvas.width, canvas.height);
canvas{ border: 1px solid black; }
<canvas width=300 height=150 id="canvas">

【讨论】:

  • 感谢您的建议,但我之前尝试过您的代码。我无法用鼠标在画布上绘制任何东西。它不能用作绘图应用程序。画布只显示绿色。
  • 我仍然没有编辑我的问题的权限。稍后我将发布相同的问题并提供更多详细信息。
【解决方案2】:

在画布上,您可以使用getAttribute() 检索维度。看看我的sn-p:

let canvas = document.getElementById('canvas');
let cheight = parseInt(canvas.getAttribute("height"));
let cwidth = parseInt(canvas.getAttribute("width"));

let context = canvas.getContext('2d');

context.fillStyle = "green";
context.fillRect(0,0,cwidth,cheight);
<canvas width="200" height="200" id="canvas">

【讨论】:

  • 感谢您的建议,但我之前尝试过您的代码。我无法用鼠标在画布上绘制任何东西。它不能用作绘图应用程序。画布只显示绿色。
  • 那么你的绘图代码可能有问题,你应该打开另一个问题。
  • 我仍然没有编辑我的问题的权限。稍后我将发布相同的问题并提供更多详细信息。谢谢你的建议。
【解决方案3】:

在您的draw() 函数中,您需要专门添加这样的背景:

const canvas = document.querySelector('#draw');
const ctx = canvas.getContext('2d');
ctx.strokeStyle = '#BADA55';
ctx.fillStyle = "#ffffff"; //HERE, use HEX format in 6 digits
ctx.fillRect(0, 0, canvas.width, canvas.height); //HERE

 ...

function draw(e) {
    ...
}

为什么?

您需要在所有内容之前绘制背景,否则一遍又一遍地绘制背景,或者在所有内容之上绘制背景会导致白色矩形与画布上的所有内容重叠。

这是LIVE DEMO

【讨论】:

  • 感谢您的回答。我在我的代码中复制并粘贴了您的代码。然后我什么都画不出来。我想我应该展示更多我的代码。有人建议我提出另一个问题。稍后我将发布相同的问题并提供更多详细信息。
  • @MiuTaji 我设法分析了您的代码并为您提供了解决方案。它在现场演示中。现在图像以白色背景下载。如果有帮助,请告诉我。
  • 非常感谢 LIVE DEMO。我认为我的绘图代码有问题。我将ctx.fillStylectx.fillRect 添加到与您相同的位置。我已经打开了另一个更详细的问题。如果您也可以检查并回答它,我将不胜感激。 Here