缩放 HTML5 画布宽度保留 w/h 纵横比

Posted

技术标签:

【中文标题】缩放 HTML5 画布宽度保留 w/h 纵横比【英文标题】:Scaling HTML5 canvas width preserving w/h aspect ratio 【发布时间】:2012-05-31 18:47:25 【问题描述】:

我有一个尺寸为 979X482px 的画布元素,我想让它拉伸以适应任何给定浏览器窗口的宽度,保持宽度/高度的纵横比为 1 比 1,我希望高度相对缩放到画布的宽度。关于如何使用 javascript/jQuery 执行此操作的任何建议?

【问题讨论】:

计算新的宽度和高度并通过 jquery/javascript 应用它们。有大量关于如何计算尺寸保持比例的信息。你自己尝试过什么吗?可能是您遇到问题的一些代码? 【参考方案1】:
 ctx.canvas.width = window.innerWidth;

 ctx.canvas.height = 3*window.innerWidth/4;

或一些变体。 ctx 是上下文。边缘情况的 if 语句可能是必要的!

【讨论】:

【参考方案2】:

首先将画布的宽度设置为 100%

$('#canvas').css('width', '100%');

然后根据它的宽度更新它的高度

$(window).resize(function()
   $('#canvas').height($('#canvas').width() / 2.031);
);

2.031 = 979/482

但你不应该像我一样附加到 $(window).resize ......这是一种不好的行为

【讨论】:

谢谢你,但我似乎无法让它工作。 $('#canvas').height($('canvas').width() / 2.031); 应该是 $('#canvas').height($('#canvas').width() / 2.031);,注意 ID 吗? 是的,我忘了放#canvas 这会导致内容模糊。您需要按照其他答案状态来操作画布上下文。 您应该设置画布元素的高度/宽度属性而不是 CSS 属性并重绘画布。 如何在响应式画布上缩放图像?【参考方案3】:

以前的所有答案都很棒,但它们不会按比例缩放画布上绘制的所有图像与新画布大小。如果你使用动力学,我在这里做了一个函数 = http://www.andy-howard.com/how-to-resize-kinetic-canvas-and-maintain-the-aspect-ratio/

【讨论】:

【参考方案4】:

我自己也在玩这个。这个概念围绕着了解画布的宽度。您还需要确保所有画布资产也使用计算来发布依赖于浏览器的内容。我记录了我的代码,希望对您有所帮助,

<body>
// in style make your canvas 100% width and hight, this will not flex for all browsers sizes.

  <style>
    canvas
      width: 100%;
      height:100%;
      position: relative;
    
  </style>

  <canvas id="myCanvas"></canvas>

  <script>
    // here we are just getting the canvas and asigning it the to the vairable context
    var canvas = document.getElementById('myCanvas');
    var context = canvas.getContext('2d');

    // no we get with of content and asign the same hight as the with. this gives up aspect ration 1:1.
    context.canvas.width = window.innerWidth;
    context.canvas.height = window.innerWidth;

    // If you want aspect ration 4:3 uncomment the line below.
    //context.canvas.height = 3 * window.innerWidth / 4;
  </script>
</body>

【讨论】:

【参考方案5】:

试试这个

$('#canvas').css('width', $(window).width());
$('#canvas').css('height', $(window).height());

【讨论】:

这不会设置比例,它只是将画布大小设置为窗口宽度和窗口高度。

以上是关于缩放 HTML5 画布宽度保留 w/h 纵横比的主要内容,如果未能解决你的问题,请参考以下文章

根据宽度和纵横比计算新高度

Fabricjs - 在画布边界内缩放画布背景以“包含”

ImageView 适合高度,自动缩放宽度,保持纵横比

缩放图像以填充 ImageView 宽度并保持纵横比

如何使 YouTube 播放器缩放到页面宽度,同时保持纵横比?

缩放位图保持纵横比