got*_*ch4 3 jquery html5 canvas
考虑以下代码(包括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>
Run Code Online (Sandbox Code Playgroud)
这将导致图像拉伸,而不是原始宽高比.在Firefox和Chrome上都有.为什么会这样?解决方法?
更新
道歉,如果我不使用jQuery生成canvas元素,这件事就不会发生.我也会把它发布到jQuery论坛.
HTML5 Canvas与HTML图像一样,具有内在大小 - 源图像中宽和高的像素数 - 以及显示大小 - 在HTML页面上绘制的大小.如果以不同方式设置这两种尺寸,则图像将被拉伸.
您用于创建canvas元素的jQuery代码通过设置CSS 和属性将显示大小设置为300x300px ,但不设置与默认值 300x150 不同的内在大小.因此,你绘制的任何东西都会拉伸两倍高.widthheight
要修复它,请直接设置canvas元素的实际width和height属性.在下面的代码中我做了这个修复.我还修复它使用HTML5 DOCTYPE,我在img.onload之前设置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>
Run Code Online (Sandbox Code Playgroud)