调整和缩放画布元素

时间:2015-01-20 16:08:39

标签: html5 canvas

我正在研究html5画布。在链接的小提琴中,我试图在其上绘制一个画布和一个圆圈,我希望它可以扩展。

This fiddle无法正常工作。另一方面,that one有效。

不同之处在于canvas元素的width和height属性。在第一个中,我将它们放在样式标记中,在后者中我将它们放在canvas元素中。 第一个:

canvas#myCanvas {

              border: 1px solid;
          }

        <canvas id="myCanvas" width="200px" height="200px"></canvas>
第二个:

canvas#myCanvas {
              width: 200px;
              height: 200px;
              border: 1px solid;
          }

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

2 个答案:

答案 0 :(得分:0)

之前已经问过这个问题。我找了一个简单的&amp;从以前的帖子中可以很容易理解答案,但它们似乎都让人感到困惑。

这是一个技术性较低的答案,希望更容易理解......

Canvas的默认大小为300x150px。当您使用CSS调整画布大小时,浏览器将“拉伸或挤压”#34;现有像素以适合您的新尺寸尺寸。因此,当您使用CSS从300x150调整到200x200时,现有画布将显示失真:

  • 内容将以水平方式显示,因为300像素的原始内容宽度被压缩到新的200像素宽度。

  • 内容将垂直拉伸,因为原始内容高度的150像素被拉伸到新的200像素高度。

enter image description here

如果你想用CSS调整大小,为了避免这种失真,你必须调整宽度和宽度。高度与原始画布大小成比例。你可以通过改变宽度和宽度来做到这一点。高度按相同的比例:

// when using CSS resizing, do it proportionally to avoid distortion
height:200px;    // 150 * 4/3 = 200px
width:400px;     // 300 * 4/3 = 400px

或者,您可以调整canvas元素本身的大小。此大小调整实际上会从画布表面添加或减去像素。因此,没有拉伸或压扁。但是,调整画布元素本身的大小也会自动删除画布内容。因此,在调整canvas元素本身后,必须将之前的内容重新绘制回画布:

// resizing the canvas element will not cause distortion
canvas.width=200;
canvas.height=200;

// now redraw the previous content back to the canvas

答案 1 :(得分:-1)

这不是一个新问题,已经多次回答。

在这里查看答案:

Canvas width and height in HTML5

在这里:

Canvas is stretched when using CSS but normal with "width" / "height" properties