【问题标题】:HTML5 Canvas size and resolutionHTML5 画布大小和分辨率
【发布时间】:2012-08-17 16:24:13
【问题描述】:

我写了一个简单的例子来说明这一点。

画布大小为 500px * 400px。我的图像的原始尺寸为 200px * 160px,dpi 为 480。我想在画布中以原始尺寸显示此图像,这样它就不会被调整大小,这会使图像模糊。

代码如下:

<html>
<head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#canvas").width(500);
            $("#canvas").height(400);

            var canvas = $("#canvas").get(0);
            var ctx = canvas.getContext('2d');

            var image = new Image();
            image.src = "fish01.png"; // size is 200px * 160px

            ctx.drawImage(image, 0, 0); // same with ctx.drawImage(image, 0, 0, 200, 160); 
        });
    </script>
</head>

<body style="background-color: #ccc; margin: 0px;">
    <canvas id="canvas" style="background-color: #66c"></canvas>
</body>
</html>

原图是:

结果是:

我觉得这很奇怪,因为画布的大小是 500px * 400px,而图像的大小是 200px * 160px,图像怎么会超出画布的范围?并且似乎图像已调整大小。

我想知道如何以原始尺寸显示图像。请给一些建议。谢谢!

【问题讨论】:

    标签: css html dom canvas


    【解决方案1】:

    尝试将您的画布 widthheight 添加为属性:

    $("#canvas").attr("width", "500px");
    $("#canvas").attr("height", "400px");
    

    这定义了画布中的可绘制空间,否则我认为它默认为 2:1。我知道您使用的是 .width().height(),但它们设置了一个无单位值,而我们将其明确定义为带有 .attr() 的像素。

    Example jsFiddle

    【讨论】:

      【解决方案2】:

      当您不将widthheight 属性添加到画布标记时,您将使用默认的widthheight 在画布上进行渲染。还有

      $("#canvas").width(500);
      $("#canvas").height(400);
      

      只需通过 css 拉伸这个标签。

      所以使用&lt;canvas id="canvas" width="500" height="400"&gt;&lt;/canvas&gt;

      或者使用$('#canvas').attr函数

      【讨论】:

      • 但这不会有任何区别:&lt;canvas id="canvas" style="width: 500px; height: 400px; background-color: #66c"&gt;&lt;/canvas&gt;
      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 2016-04-16
      • 2021-12-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多