如何将图像添加到画布

时间:2011-05-15 21:28:52

标签: javascript html5 canvas

我正在尝试使用HTML中的新canvas元素。

我只想将图像添加到画布中,但由于某种原因它不起作用。

我有以下代码:

HTML

<canvas id="viewport"></canvas>

CSS

canvas#viewport { border: 1px solid white; width: 900px; }

JS

var canvas = document.getElementById('viewport'),
context = canvas.getContext('2d');

make_base();

function make_base()
{
  base_image = new Image();
  base_image.src = 'img/base.png';
  context.drawImage(base_image, 100, 100);
}

图片存在,我没有JavaScript错误。图像不会显示。

这一定是非常简单的我错过了......

4 个答案:

答案 0 :(得分:185)

在绘制图像之前,您可能需要等到图像加载完毕。试试这个:

var canvas = document.getElementById('viewport'),
context = canvas.getContext('2d');

make_base();

function make_base()
{
  base_image = new Image();
  base_image.src = 'img/base.png';
  base_image.onload = function(){
    context.drawImage(base_image, 0, 0);
  }
}

即。在图像的onload回调中绘制图像。

答案 1 :(得分:4)

这是在画布上绘制图像的示例代码 -

$("#selectedImage").change(function(e) {

var URL = window.URL;
var url = URL.createObjectURL(e.target.files[0]);
img.src = url;

img.onload = function() {
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");        

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(img, 0, 0, 500, 500);
}});

在上面的代码中,selectedImage是一个输入控件,可用于浏览系统上的图像。 有关在画布上绘制图像同时保持纵横比的示例代码的更多详细信息:

http://newapputil.blogspot.in/2016/09/show-image-on-canvas-html5.html

答案 2 :(得分:1)

在我的情况下,我误解了函数参数,它们是:

context.drawImage(image, left, top);
context.drawImage(image, left, top, width, height);

如果您希望他们

context.drawImage(image, width, height);

您将图像放在画布外面,其效果与问题中描述的效果相同。

答案 3 :(得分:1)

您必须使用.onload

let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d"); 

const drawImage = (url) => {
    const image = new Image();
    image.src = url;
    image.onload = () => {
       ctx.drawImage(image, 0, 0)
    }
}

这是为什么

如果在创建画布后首先加载图像,则画布将无法传递所有图像数据以绘制图像。因此,您需要先加载图像随附的所有数据,然后才能使用drawImage()

相关问题