gpt4 book ai didi

javascript - 未指定暗淡时图像不会填充 Canvas

转载 作者:行者123 更新时间:2023-12-02 21:41:16 26 4
gpt4 key购买 nike

我想动态创建 Canvas ,在运行时指定 Canvas 的尺寸;然后我想在该 Canvas 上渲染图像,以便它填充 Canvas 的整个尺寸。

当我在<canvas>上声明 Canvas 的宽度和高度时,这按预期工作。元素,如以下代码片段所示(默认隐藏):

<!DOCTYPE html>
<html>

<body>

<h3>
Source Image
</h3>
<img id="image" src="http://placehold.it/180x180">

<h3>Canvas:</h3>
<canvas id="canvas" width="200" height="200" style="border:1px solid #d3d3d3;">
</canvas>

<script>
window.onload = function() {
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var img = document.getElementById("image");
ctx.drawImage(img, 10, 10);
}
</script>

</body>

</html>

但是,如果我动态创建 <canvas>元素使用Javascript,并在创建后使用CSS设置大小,图像不会填满整个 Canvas :

<!DOCTYPE html>
<html>

<body>

<h3>
Source Image
</h3>
<img id="image" src="http://placehold.it/180x180">

<h3>Canvas:</h3>
<canvas id="canvas" style="border:1px solid #d3d3d3;">
</canvas>

<script>
window.onload = function() {
var c = document.getElementById("canvas");
c.style.width = "200px";
c.style.height = "200px";
var ctx = c.getContext("2d");
var img = document.getElementById("image");
ctx.drawImage(img, 10, 10);
}
</script>

</body>

</html>

我觉得我在这里遗漏了一些非常明显的东西——任何有关如何使动态渲染的 Canvas 看起来像第一个片段的帮助将不胜感激。

最佳答案

通过使用c.style.width,您可以定义在屏幕上显示它的比例(它只是 CSS)。

要实际设置 Canvas 的固有大小,请执行以下操作:

window.onload = function() {
var c = document.getElementById("canvas");
c.width = 200;
c.height = 200;
var ctx = c.getContext("2d");
var img = document.getElementById("image");
ctx.drawImage(img, 10, 10);
}
<h3>Source Image</h3>
<img id="image" src="http://placehold.it/180x180">

<h3>Canvas:</h3>
<canvas id="canvas" style="border:1px solid #d3d3d3;"></canvas>

注意:这并不妨碍您拥有不同的固有尺寸和显示尺寸。事实上,如果您的页面显示在具有高像素密度的 Retina 屏幕上,它通常很有用。在这种情况下,您可以使用 200x200 的 Canvas ,并将其 CSS 尺寸设置为 100x100。这样, Canvas 中的每个像素将恰好是其显示的屏幕的 1 个像素。

More info on window.devicePixelRatio如果你有兴趣。

关于javascript - 未指定暗淡时图像不会填充 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60364200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com