HTML canvas 在 canvas 下面显示图像而不是在 canvas 里面

HTML canvas displays image below canvas instead of inside canvas

我正在尝试在 HTML5 canvas 中显示背景图片。我已确保图像和 html 文件位于同一文件夹中,因此,图像正在显示。我还尝试调整图像大小,以确保图像对于 canvas 来说不会太大,但是,图像一直显示在 canvas 下方,而不是 canvas 内部。我的代码如下:

<!DOCTYPE html>
<html lang="en"> 
<head>
    <meta charset="UTF-8">
    <title>Opening screen</title>
</head>
<body>
<img>
<canvas id="canvas"
        style =
                "width: 700px;
                 height: 500px;
                 border: 1px solid #000000;
                 padding-left: 0;
                 padding-right: 0;
                 margin-top: 40px;
                 margin-left: auto;
                 margin-right: auto;
                 display: block;">
</canvas>
<img id="sky"  src="sky.png">
<script>
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var img = document.getElementById("sky");
    ctx.drawImage(img, 10, 10);
</script>
</body>
</html>

将此添加到您的脚本中- 加载图像后将图像绘制到 canvas。

var background = new Image();
background.src = "www.xyz.com/background.png";

// Make sure the image is loaded first otherwise nothing will draw.
background.onload = function(){
    ctx.drawImage(background,0,0);   
}

当您尝试将图像插入 canvas 时,该图像还没有 loaded/downloaded。

您可以将代码添加到 window.onload 函数,它应该可以工作

window.onload = function() {
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var img = document.getElementById("sky");
    ctx.drawImage(img, 10, 10);
}

至于为什么它显示在您的 canvas 下方,您有一个包含该图像的 img 元素,位于 canvas 之后。

您可以移除您的 img 标签并为您的 canvas

设置背景

<canvas id="canvas"
        style =
                "width: 700px;
                  background: url(https://placekitten.com/1000/1000) no-repeat top center;
                  background-size:cover;
                 height: 500px;
                 border: 1px solid #000000;
                 padding-left: 0;
                 padding-right: 0;
                 margin-top: 40px;
                 margin-left: auto;
                 margin-right: auto;
                 display: block;">
</canvas>

实际上,您创建的图像元素将呈现在 canvas 下方,因为 canvas 始终呈现在所有元素上方。有一种方法可以将图像标签放在 canvas 上方,但它会隐藏您在 canvas 上绘制的其他内容,因此请使用 graphicsContext.drawImage() 函数。

var canvas = document.getElementById("canvas-id");
//graphics context
var ctx = canvas.getContext("2d");
var backgroundImage = new Image();
backgroundImage.src = "path-to-the-background-image-file/bgi.png";
backgroundImage.onload = function() {

ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.width);

}