gpt4 book ai didi

css - 为什么 Canvas drawImage 方法正在缩放?

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:50 26 4
gpt4 key购买 nike

我正在尝试使用以下代码在宽度为 150px 和高度为 150px 的 Canvas 上绘制图片。然而,图片似乎在缩放我为 Canvas 设置的宽度和高度属性(我将宽度设置为 500px,高度设置为 300px)。为什么 Canvas 以这种方式工作?如何在 Canvas 上绘制绝对大小为 px 的图像?

非常感谢!

<head>
<meta charset="UTF-8">
<title>Base</title>
<script type="text/javascript" src="./js/jquery-1.10.1.js"></script>
<script type="text/javascript">
var img = new Image();

$(window).ready(function() {
img.src = "./Images/img.jpg";;

ctx = document.getElementById("main").getContext("2d");

img.onload = function() {
ctx.drawImage(img, 0, 0, 150, 150);
}
});

</script>
</head>

<body>
<canvas id="main" style="background-color:yellow; width:500px; height:300px; z-index:1; position:absolute;"></canvas>
</body>

最佳答案

您需要设置 Canvas 的实际像素分辨率,即设置像素的行数和列数(通过使用 widthheight 属性canvas 标签)。否则,您只会得到一个 Canvas ,其默认分辨率根据您的 CSS 确定的宽度和高度进行缩放。

编辑:这样想。当您在 DOM 中放置一个 Canvas 时,您实际上是在声明一些类似具有特定宽度和高度(以像素为单位)的可操作图像。现在该图像可以任意缩放。因此,如果您有一个 200x200 的 Canvas ,但在 CSS 中声明 Canvas 为 400px x 200px,则 Canvas 的每个像素将以两个像素的高度呈现(具有抗锯齿)。因此,绘制到该 Canvas 上的任何图像都将是正常高度的两倍。所以如果你想让 Canvas 上的一个像素的宽度和高度来表示屏幕上呈现的像素的宽度**,你想将宽度和高度设置为实际涉及的像素数,而不是使用 CSS。

** 像素可能不代表屏幕上的像素。例如,我在 Surface Pro 上写这个,它对许多应用程序都有 dpi 缩放功能,否则应用程序按钮会非常小,触摸起来有点难以激活。我的浏览器看到的屏幕宽度是 1920/1.5 = 1280。我可以为浏览器打开这个设置,重新启动它,它会看到完整的 1920... 现在,这对图像渲染有何影响?我认为即使使用此设置,浏览器也可以呈现完整的真实像素分辨率图像; Windows 不只是在浏览器版本中呈现一些模糊缩放,但我必须做一些研究才能真正了解 Windows 与浏览器的结合情况。

关于css - 为什么 Canvas drawImage 方法正在缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110775/

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