【发布时间】:2016-10-29 22:22:51
【问题描述】:
为什么 SVG 在画布中不能正确缩放(全是像素化和模糊的)? 我做错了什么?
我想要的只是 SVG 图像,以保持它的纵横比与画布大小无关,并且不会让它变得模糊。
var canvas = document.getElementById("screen"),
ctx = canvas.getContext("2d");
var img = new Image();
img.src = "http://imgh.us/perso.svg";
img.onload = function() {
ctx.drawImage(img, 0, 0);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html,
body {
width: 100%;
height: 100%;
}
#screen {
display: block;
width: 100%;
height: 100%;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/style.css" />
<title>Game</title>
</head>
<body>
<canvas id="screen"></canvas>
<script type="text/javascript" src="js/game.js"></script>
</body>
</html>
【问题讨论】:
-
你为什么要把它放到画布上?一旦它在画布元素中,它就会被光栅化。它不再是可缩放的 Vector 图形,而是像素。只需将 SVG 元素放入 DOM 本身即可。
-
我想用画布和 SVG 图像制作游戏。我认为它仍然是 SVG ......我想我必须阅读更多关于画布到底是什么的信息。谢谢你的澄清!
-
我不是想阻止你。如果您有真正的理由想要在画布中使用 SVG,那么您应该在问题中将其添加为细节。也许看看this answer
-
我想在画布中使用 SVG,这样它就可以轻松放大以适应任何分辨率。我想这并不像我想象的那么容易。别担心,我不会放弃。还将详细说明我未来的问题。
-
@newbStudent 对此有何更新?您是否能够使用下面给出的解决方案从 svg 渲染清晰的图像?如果是,您具体做了什么?
标签: javascript css html canvas svg