简体   繁体   English

调整HTML5画布中的图像大小

[英]Resize image in html5 canvas

I'm taking image input from user, then resizing and showing it on a canvas. 我正在从用户处获取图像输入,然后调整大小并将其显示在画布上。 Here is the code- 这是代码-

HTML- HTML-

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

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

}); });

But here I'm loosing the aspect ratio. 但是在这里,我失去了宽高比。 Is there any way to do it? 有什么办法吗?

UPDATE- 更新-

I've got the answer from this sa question - 我从这个问题中得到了答案-

Here is a snippet to help you for that 这是一个片段,可以帮助您

 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> 

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

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