Подтвердить что ты не робот

Холст HTML5: изменение размера изображения

Я пытаюсь разместить изображение на холсте, не изменяя его размер. Я думал, что 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 получает действительные значения.

4b9b3361

Ответ 1

Не используйте CSS для вашего холста. Это создает холст размера по умолчанию и растягивает его. Задайте размеры холста непосредственно на нем, и вы получите пространство от 1 до 1 пикселя.

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

Ответ 2

Trochoid прав, атрибут стиля вашего тега canvas вызывает проблемы. Вы можете установить его в 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"/>

Ответ 3

Также убедитесь, что вы получили ширину и высоту изображения и нарисовали его ПОСЛЕ загрузки.

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

Ответ 4

Вы должны сначала загрузить изображение функции, прежде чем рендеринг на экране, чтобы сделать это, следуя приведенному ниже коду.

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

Ответ 5

Попробуйте использовать эту библиотеку, которую я недавно создал, которая может загружать изображение, изменять размер фиксированной ширины и высоты или предустановок, конвертировать в другие форматы, такие как 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

Надеюсь, это поможет вам!