将图像加载到织物画布背景中

load image to fabric canvas background

本文关键字:背景 布背景 加载 图像      更新时间:2023-09-26

hi-im试图上传一张图像并将其作为画布背景。代码片段:

function handleMenuImage(e){
    var reader = new FileReader();
    reader.onload = function(event){
        var img = new Image();
        img.src = event.target.result;
        canvas.setWidth(img.width);
        canvas.setHeight(img.height);
        canvas.setBackgroundImage(img.src, canvas.renderAll.bind(canvas));
        //set the page background
        menuPages[currentPage].pageBackground.src = img.src;
        canvas.backgroundImageStretch = false;
    }
    reader.readAsDataURL(e.target.files[0]); 
}

问题是画布没有显示背景。我可以在chromedevtools中看到画布背景src。背景实际上已经被设置,但不知何故它没有被显示。

这似乎令人奇怪地困惑。如果你想要HTMLCanvasElement上的背景图像,为什么不通过CSS设置背景图像呢?

#myCanvas {
  background-image: url(http://placekitten.com/100/100);
}

或者通过JavaScript:设置CSS

canvas.style.backgroundImage = 'url(http://placekitten.com/100/100)';

尝试以下代码:

var raw_reader = new FileReader();
raw_reader.onload = function (event){
  var reader = new FileReader();
  reader.onload = function(event){
    var img = new Image();
    img.src = event.target.result;
    canvas.setWidth(img.width);
    canvas.setHeight(img.height);
    canvas.setBackgroundImage(img.src, canvas.renderAll.bind(canvas));
    //set the page background
    menuPages[currentPage].pageBackground.src = img.src;
    canvas.backgroundImageStretch = false;
  }
  reader.readAsDataURL(e.target.files[0]); 
}
raw_reader.readAsBinaryString(e.target.files[0]);