【问题标题】:HTML5/JS canvas displaying picturesHTML5/JS 画布显示图片
【发布时间】:2016-02-22 02:08:59
【问题描述】:

我无法在画布上显示图片,尤其是在使用 Chrome 时。

我有一个调用方法来绘制肖像(名称、img、边框),但 context.drawImage() 似乎在 Chrome 中不起作用。有什么解决办法吗?

Portrait.prototype.draw = function (context, x, y, tX, tY) {
    context.save();
    context.translate( tX, tY );        
    context.fillStyle = 'blue';
    context.strokeStyle = 'black';
    context.strokeRect(x, y, 160, 200);
    context.fillRect(x, y, 160, 200);
    context.stroke(); 
    // adding the image
    context.beginPath();          
    var img = new Image();
    var link = this.getImageUrl();
    img.src = link; 
    //context.drawImage(img,x+5,y+5);  //works mozzila      
    img.onload = function () { context.drawImage(img,x+5,y+5); }  
    // partial work chrome but on refresh displays e.g two different portrait images in turn in a random portrait (if multiple portraits on canvas)          
    // text box
    context.beginPath();
    context.fillStyle = '#ffffff';
    context.fillRect(x+5,y + 165,150,30);
    // text
    context.beginPath();
    context.fillStyle = 'black';
    var n = this.getName();
    context.font = "25px Aerial";
    context.fillText(n,x+5,y+190); // should give the name      
    context.restore();
};

【问题讨论】:

  • getImageURL() 有效,它是一个返回对象正确 url 的方法。

标签: javascript html canvas


【解决方案1】:

您正在传递img.onload 一个将异步执行的函数,这意味着其他代码行将在它完成之前继续执行。将整个“绘制”包裹在 image.onload 函数中。

Portrait.prototype.draw = function (context, x, y, tX, tY) {
    var img = new Image();
    var link = this.getImageUrl();
    img.src = link; 

    img.onload = function () {
        context.save();
        context.translate( tX, tY );        
        context.fillStyle = 'blue';
        context.strokeStyle = 'black';
        context.strokeRect(x, y, 160, 200);
        context.fillRect(x, y, 160, 200);
        context.stroke();
        context.drawImage(img,x+5,y+5);
        //...

    }
};

【讨论】:

  • 您先生是救命稻草!我虽然它可能是异步的,但我不知道如何修复它。谢谢。
  • 哦,顺便说一句,我不得不删除 var n = this.getName();因为它无法引用正确的对象
  • 你可以保留,只要在draw函数的第一行加上var self = this;,改写var n = self.getName()
猜你喜欢
  • 2012-12-10
  • 2012-12-15
  • 2017-06-02
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
相关资源
最近更新 更多