简体   繁体   English

HTML5画布:图像大小调整

[英]HTML5 canvas: image resizing

I'm trying to place an image on a canvas without resizing it. 我试图在没有调整大小的情况下将图像放在画布上。 I thought drawImage(img, x, y) would do the trick, but it stretches the image to fill the canvas. 我认为drawImage(img,x,y)可以做到这一点,但它会拉伸图像以填充画布。 Also supplying drawImage(img, x, y, width, height) with the dimensions of my image doesn't seem to work. 同时提供drawImage(img,x,y,width,height)和我的图像尺寸似乎不起作用。

Here's my code: 这是我的代码:

<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"/>

Thanks in advance! 提前致谢!

PS: I added the parseInt's to make sure that drawImage gets valid values. PS:我添加了parseInt以确保drawImage获得有效值。

Don't use CSS to size your canvas. 不要使用CSS来调整画布大小。 That creates a default sized canvas and stretches it. 这会创建一个默认大小的画布并将其拉伸。 Set the canvas dimensions directly on it and you'll get a 1 to 1 pixel drawing space. 直接在其上设置画布尺寸,您将获得1到1像素的绘图空间。

<canvas id="story" width="800" height="600" style="position:relative;"></canvas>

Trochoid is right, the style attribute on your canvas tag is causing problems. Trochoid是正确的,canvas标签上的style属性会导致问题。 You could set it in the HTML, as he suggests, or better yet you can leave it blank and set it dynamically in the JS: 你可以像他建议的那样在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"/>

Also make sure you get the width and height of the image and draw it AFTER it has been loaded. 还要确保获得图像的宽度和高度,并在加载后绘制它。

img.onload = function () {
  var width = parseInt(img.width);
  var height = parseInt(img.height);
  context.drawImage(img, 0, 0, width, height);
};

You have to first load the function image perfectly before rendering on the screen to do that follow the below code.. 您必须先在屏幕上渲染之前完全加载功能图像,然后按照以下代码进行操作。

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

Try using this library I recently created which can load an image, resize it fixed width & height or precentage, convert to and from other formats like base64 or blob, and allows you to apply a watermark. 尝试使用我最近创建的这个库,它可以加载图像,调整固定的宽度和高度或百分比,转换为其他格式,如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 https://github.com/vnbenny/canvawork.js

Hope this helps you! 希望这对你有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM