如何将图像添加到画布

Pee*_*Haa 96 javascript html5 canvas

我正在用HTML中的新canvas元素进行一些实验.

我只是想在画布上添加一个图像,但由于某些原因它不起作用.

我有以下代码:

HTML

<canvas id="viewport"></canvas>
Run Code Online (Sandbox Code Playgroud)

CSS

canvas#viewport { border: 1px solid white; width: 900px; }
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

图像存在,我没有JavaScript错误.图像不显示.

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

Tho*_*mas 195

也许你应该等到图像加载后才能绘制它.试试这个:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • @swogger而不是感谢问什么,试试看.这非常有效.确保首先检查源的img大小,否则将被裁剪,除非你使用完整函数`context.drawImage(base_image,0,0,200,200);`.这将从0px位置绘制base_img,绘制区域为200x200px. (5认同)

nvi*_*yal 8

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

$("#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);
}});
Run Code Online (Sandbox Code Playgroud)

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

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


Ant*_*eon 6

你必须使用.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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么

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