考虑以下代码(包括jQuery):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src = "js/jquery-1.4.2.js"></script>
<script type="text/javascript">
jQuery(window).bind("load", function() {
var elem = $("<canvas>", {width:300, height:300});
var canvele = elem[0];
var imm = new Image();
imm.src = "card1/mask-x-6.png";
imm.onload = function(){
var ctx = canvele.getContext('2d');
ctx.drawImage(imm, 0,0);
$('body').append(elem);
}
});
</script>
</head>
<body>
</body>
</html>
这将导致图像拉伸,而不是原始宽高比。在Firefox和Chrome上都有。为什么会这样?解决方法?
更新
道歉,如果我不使用jQuery生成canvas元素,这件事就不会发生。我也会把它发布到jQuery论坛。
答案 0 :(得分:8)
HTML5 Canvas与HTML图像一样,具有内在大小 - 源图像中宽和高的像素数 - 以及显示大小 - 如何大,它在HTML页面上绘制。如果这两种尺寸设置不同,图像将被拉伸。
您用于创建canvas元素的jQuery代码通过设置CSS width
和height
属性将 display 大小设置为300x300px,但不设置< em>内在大小不同于300x150的the default。因此,你绘制的任何东西都会拉伸两倍高。
要修复它,请直接设置canvas元素的实际width
和height
属性。在下面的代码中我做了这个修复。我还修复了它以使用HTML5 DOCTYPE和我set the img.onload
before the img.src
:
<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Setting Canvas Dimensions</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js">
</script>
<script type="text/javascript">
$(function(){
var elem = $("<canvas>", {width:300, height:300});
var canvele = elem[0];
canvele.width = canvele.height = 300;
var imm = new Image;
imm.onload = function(){
var ctx = canvele.getContext('2d');
ctx.drawImage(imm, 0,0);
$('body').append(elem);
};
imm.src = "http://phrogz.net/tmp/gkhead.jpg";
});
</script>
</head><body></body></html>