javascript - 更改 Image() 对象尺寸(宽度和高度)

标签 javascript canvas aspect-ratio

我正在尝试调整图像的尺寸,同时保持其纵横比。这似乎是一项非常简单的任务,但我无法在任何地方找到相关的答案……(与 JavaScript 的 Image() 对象有关)。我可能遗漏了一些非常明显的东西。以下是我要实现的目标:

var img = new window.Image();
img.src = imageDataUrl;
img.onload = function(){
    if (img.width > 200){
        img.width = 200;
        img.height = (img.height*img.width)/img.width;
    }
    if (img.height > 200){
        img.height = 200;
        img.width = (img.width*img.height)/img.height;
    }
};

这是在将图像绘制到 Canvas 上之前按比例调整图像的大小,如下所示:context.drawImage(img,0,0,canvas.width,canvas.height);。但是它会出现我无法直接更改 Image() 尺寸,那它是怎么做到的呢?谢谢。

编辑: 我没有正确解决图像 proportions使用交叉乘法。 @markE 提供了一种获得正确比例的简洁方法。下面是我的新(工作)实现:

var scale = Math.min((200/img.width),(200/img.height));
img.width = img.width*scale;
img.height = img.height*scale;
clearCanvas(); //clear canvas
context.drawImage(img,0,0,img.width,img.height);

最佳答案

按比例缩放图像的方法如下:

function scalePreserveAspectRatio(imgW,imgH,maxW,maxH){
    return(Math.min((maxW/imgW),(maxH/imgH)));
}

用法:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");

var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/balloon.png";
function start(){

  canvas.width=100;
  canvas.height=100;

  var w=img.width;
  var h=img.height;

  // resize img to fit in the canvas 
  // You can alternately request img to fit into any specified width/height
  var sizer=scalePreserveAspectRatio(w,h,canvas.width,canvas.height);

  ctx.drawImage(img,0,0,w,h,0,0,w*sizer,h*sizer);

}

function scalePreserveAspectRatio(imgW,imgH,maxW,maxH){
  return(Math.min((maxW/imgW),(maxH/imgH)));
}
body{ background-color: ivory; }
canvas{border:1px solid red;}
<h4>Original Balloon image resized to fit in 100x100 canvas</h4>
<canvas id="canvas" width=100 height=100></canvas>

关于javascript - 更改 Image() 对象尺寸(宽度和高度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35613799/

相关文章:

Javascript for循环嵌套迭代

Rails 形式的 Javascript slider

javascript - 将多个 imageData 结构合并到一张 Canvas 中

internet-explorer - 使用 svg 图像在 Internet Explorer 上保持纵横比

android - 设置 Activity 背景不拉伸(stretch)

javascript - lodash - _.some() 带条件/计数器

javascript - HTMLCanvasElement 上 Unresolved 方法 captureStream

javascript - JS 贪吃蛇游戏中的碰撞检测错误

javascript - <canvas> 钻石/玻璃效果

php - 确定 YouTube 视频是否为宽屏?