javascript - 使用drawImage拉伸(stretch) Canvas

标签 javascript angularjs html canvas

我知道必须设置 <canvas> 的大小使用 width 的元素和height属性以避免拉伸(stretch)。除了背景颜色之外,我没有应用任何 CSS。

我正在使用ctx.drawImage()显示视频。 奇怪的是,我的640x480视频播放正常并且没有拉伸(stretch)。它只发生在我的640x360上现在的视频。

我创建了一个 Angular Directive(指令),将视频绘制到 Canvas 元素上,除了拉伸(stretch)之外,它一切正常。这是我将视频元素绘制到 Canvas 上的代码:

scope.renderPlayer = function()
{
  var $this = this;
  attributes.width = player.videoWidth;
  attributes.height = player.videoHeight;
  canvas.setAttribute('width', attributes.width);
  canvas.setAttribute('height', attributes.height);

  (function loop()
  {
    if (!$this.paused && !$this.ended)
    {
      ctx.drawImage($this, 0,0, attributes.width, attributes.height);
      setTimeout(loop, 1000/30);
    }
  })();
};
player.addEventListener('play', scope.renderPlayer);

我向您保证,视频源的底部没有拉伸(stretch)伪影,如下图所示(您确实可以看到右下角拉伸(stretch)的像素)。我的 Canvas 元素的初始宽度和高度是 640x480,它将根据加载视频的大小而变化。

stretching at the bottom

最佳答案

请告诉我这个 CSS 是否为您解决了这个问题,每当我使用 Canvas 时我都需要它:

canvas {
    display: block;
}

canvas 标签容易受到与 img 标签相同的缺陷的影响,因为它会在其下方呈现额外的空间。不过,您将尺寸设置为 HTML 属性是正确的,这真是太痛苦了。

关于javascript - 使用drawImage拉伸(stretch) Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735578/

相关文章:

javascript - Angularjs Modal + 自动完成输入(附有 Plunker)

javascript - 无法使用 ES6 语法注入(inject)服务

css - 在我将鼠标悬停在子菜单上之前,下拉菜单隐藏了

Javascript错误的target.ids返回

javascript - 不加载 CSS 和 JS ngBoilerplate

javascript设置对象数组中的所有值

javascript - Ratchet.js 和 window.history.back();

javascript - 根据传递的参数覆盖 Javascript 函数

javascript - 切换隐藏/显示 div 适用于按钮,但不适用于链接?

javascript - Ionic- Cordova 构建问题