[英]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.