我正在尝试将图像放在画布上而不调整其大小。我认为drawImage(img,x,y)可以做到这一点,但它会拉伸图像以填充画布。 同时使用我的图像尺寸提供drawImage(img,x,y,width,height)似乎不起作用。
这是我的代码:
<canvas id="story" style="position:relative; width:800px; height:600px;"></canvas>
<script type="text/javascript">
window.onload = function() {
var canvas = document.getElementById("story");
var context = canvas.getContext("2d");
var img = document.getElementById("img1");
var width = parseInt(img.width);
var height = parseInt(img.height);
context.drawImage(img, 0, 0, width, height);
}
</script>
<img id="img1" alt="" src="http://link to image"/>
提前致谢!
PS:我添加了parseInt以确保drawImage获得有效值。
答案 0 :(得分:21)
不要使用CSS来调整画布大小。这会创建一个默认大小的画布并将其拉伸。直接在其上设置画布尺寸,您将获得1到1像素的绘图空间。
<canvas id="story" width="800" height="600" style="position:relative;"></canvas>
答案 1 :(得分:13)
Trochoid是正确的,canvas标签上的style属性会导致问题。你可以像他建议的那样在HTML中设置它,或者更好的是你可以把它留空并在JS中动态设置它:
<canvas id="story"></canvas>
<script type="text/javascript">
window.onload = function() {
var canvas = document.getElementById("story");
var context = canvas.getContext("2d");
var img = document.getElementById("img1");
var width = parseInt(img.width);
var height = parseInt(img.height);
canvas.height=height;
canvas.width=width;
context.drawImage(img, 0, 0);
}
</script>
<img id="img1" alt="" src="http://link to image"/>
答案 2 :(得分:4)
还要确保获得图像的宽度和高度,并在加载后绘制它。
img.onload = function () {
var width = parseInt(img.width);
var height = parseInt(img.height);
context.drawImage(img, 0, 0, width, height);
};
答案 3 :(得分:0)
你必须先在屏幕上渲染之前完全加载功能图像,然后按照下面的代码进行操作。
<img id="demo-img" src="image_name.png">
<br>
<canvas id="myCanvas" width="500" height="500" style="border:1px solid #d3d3d3">Your browser does not support the HTML5 canvas tag
</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("demo-img");
img.onload=function fun(){ctx.drawImage(img,0,0,img.width,img.height,0,0,img.width,img.height)}
</script>
答案 4 :(得分:0)
尝试使用我最近创建的这个库,它可以加载图像,调整它的固定宽度和放大倍数。高度或百分比,转换为其他格式(如base64或blob),并允许您应用水印。
var CanvaWork = new CanvaWork();
CanvaWork.loadImage("yourimage.png", function(obj){
console.log(obj.canvas); // The usable canvas
console.log(obj.width);
console.log(obj.height);
console.log(obj.image); // Contains the image file
});
https://github.com/vnbenny/canvawork.js
希望这能帮到你!