javascript - 调整 html5 Canvas 中图像的大小

标签 javascript html5-canvas image-resizing

我正在从用户那里获取图像输入,然后调整大小并将其显示在 Canvas 上。这是代码-

HTML-

<form class="cmxform">
      <input type='file' id="Photo" />
      <canvas id="canvas" width="300" height="200"></canvas>
</form>

JavaScript-

$("#Photo").change(function (e) {
    var ctx = document.getElementById('canvas').getContext('2d');
    var img = new Image();
    img.src = URL.createObjectURL(e.target.files[0]);
    img.onload = function () {
       ctx.drawImage(img, 0, 0, img.width, img.height,     // source rectangle
             0, 0, canvas.width, canvas.height); // destination rectangle
    }

});

但这里我失去了纵横比。有什么办法可以做到吗?

UPDATE-

I've got the answer from this sa question -

最佳答案

这里有一个片段可以帮助您实现这一点

var ctx = document.getElementById('canvas').getContext('2d');
 var img = new Image();
 var fill = true;
 if (fill)
 {
 	$('#fill').attr("disabled", true);
 }
$("#Photo").change(function (e) {
    img.src = URL.createObjectURL(e.target.files[0]);
    img.onload = function () {
    if (fill)
      {
				drowImageFill(img);
      }
      else
      {
         drowImageCenter(img);
      }
    }
});

$("#fill").click(function(){
  //console.log("fill");
  var input = document.getElementById('Photo');
  if (input.files[0] !== undefined)
  {
    img.src = URL.createObjectURL(input.files[0]);
    img.onload = function () {
    		drowImageFill(img);
    }
  }
  $('#fill').attr("disabled", true);
  $('#center').attr("disabled", false);
  fill = true;
});
$("#center").click(function(){
  //console.log("center");
   var input = document.getElementById('Photo');
  if (input.files[0] !== undefined)
  {
    img.src = URL.createObjectURL(input.files[0]);
    img.onload = function () {
    		drowImageCenter(img);
    }
  }
  $('#center').attr("disabled", true);
  $('#fill').attr("disabled", false);
  fill = false;
});
//ratio formula
//http://andrew.hedges.name/experiments/aspect_ratio/
function drowImageFill(img){
    ctx.clearRect(0, 0, canvas.width, canvas.height);
		//detect closet value to canvas edges
    if( img.height / img.width * canvas.width > canvas.height)
    {
    	 // fill based on less image section loss if width matched
      var width = canvas.width;
      var height = img.height / img.width * width;
      offset = (height - canvas.height) / 2;
      ctx.drawImage(img, 0, -offset, width, height);
    }
    else
    {
      // fill based on less image section loss if height matched
      var height = canvas.height;
      var width = img.width / img.height * height;
      offset = (width - canvas.width) / 2;
      ctx.drawImage(img, -offset , 0, width, height);
    }
    
}

function drowImageCenter(img)
{
   ctx.clearRect(0, 0, canvas.width, canvas.height);
		if( img.height / img.width * canvas.width < canvas.height)
    {
      // center based on width
      var width = canvas.width;
      var height = img.height / img.width * width;
      offset = (canvas.height - height) / 2;
      ctx.drawImage(img, 0, offset, width, height);
    }
    else
    {
      // center based on height
      var height = canvas.height;
      var width = img.width / img.height * height;
      offset = (canvas.width - width) / 2;
      ctx.drawImage(img, offset , 0, width, height);
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="canvas" width="300" height="200" style="border:2px solid #000000;"></canvas>
<form class="cmxform">
      <input type='file' id="Photo" />
</form>

<button id="fill">Fill</button>
<button id="center">Center</button>

关于javascript - 调整 html5 Canvas 中图像的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41135976/

相关文章:

html - Canvas 中的线宽

html - 如何为 $img 设置最大高度但保持比例

python - 如何在不增加噪声的情况下使用python调整图像大小?

java - 如何在将图像保存到 blob 字段 mysql 之前以 InputStream 的方式调整图像大小

javascript - 使用 Jquery 在菜单周围添加 div

javascript - 如何在javascript中将div添加到弹出窗口?

javascript - 带有关闭菜单的 jQuery Accordion

javascript - 重写 if else 进行切换

javascript - 沿固定 Angular 移动矢量 "straight out"

javascript - 如何在 javascript 中获取 HTML5 Canvas.todataurl 文件大小?