HTML5画布:图像大小调整

时间:2010-11-12 16:15:09

标签: javascript image html5 canvas

我正在尝试将图像放在画布上而不调整其大小。我认为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获得有效值。

5 个答案:

答案 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

希望这能帮到你!