html5画布未显示完整图像

时间:2011-08-19 16:37:03

标签: html5 canvas html5-canvas

我的图片尺寸是940 * 300,但是html5画布只显示了chrome中的部分图片。你能帮忙解决这个问题吗?

以下是代码

<!DOCTYPE html>
<html>
    <head>
        <style></style>
    </head>
    <body onload="draw();">
        <p>Drag me</p>
        <canvas id="paint_area"></canvas>

        <script>
            function draw() {
                var ctx = document.getElementById('paint_area').getContext('2d');

                //ctx.fillStyle = '#cc3300';

                var img_buffer = document.createElement('img');
                img_buffer.src = 'http://www.jobcons.in/homebanner.jpg';
                var imgWidth = img_buffer.width;
                var imgHeight = img_buffer.height;
                ctx.width = imgWidth;
                ctx.height = imgHeight;
                ctx.drawImage(img_buffer,0,0,imgWidth,imgHeight);
            }
        </script>
    </body>
</html>

2 个答案:

答案 0 :(得分:10)

两件事:

  • 您正在设置上下文的大小,这没有多大意义。 画布具有宽度和高度。

  • 您应该使用img_buffer.onload确保只在加载图像时绘制图像,而不是在图像完全加载之前。

小提琴:http://jsfiddle.net/pimvdb/TpFQ8/

所以:

<canvas id="paint_area" width="940" height="300"></canvas>

var cv  = document.getElementById('paint_area'),
    ctx = ctx.getContext('2d');

img_buffer.onload = function() {
    var imgWidth = img_buffer.width;
    var imgHeight = img_buffer.height;
    cv.width = imgWidth;
    cv.height = imgHeight;
    ctx.drawImage(img_buffer, 0, 0, imgWidth, imgHeight);
}

答案 1 :(得分:6)

原因很简单,你不能

  ctx.width= imgWidth;
  ctx.height=imgHeight;

你必须

  can.width= imgWidth;
  can.height=imgHeight;

其中can是对画布的引用,不是画布上下文。

工作示例:

http://jsfiddle.net/rbNzb/