Fabric JS 背景图片大小问题

问题描述 投票:0回答:1

因此,有多种方法可以加载画布背景图像,但在我的代码中,我像这样加载它:

var canvas = new fabric.Canvas('canvas', { backgroundImage: "<?php echo $image; } ?>", }

在我发现的教程中(https://www.tutorialspoint.com/how-to-create-a-canvas-with-background-image-using-fabricjs)它展示了如何设置画布高度和宽度,例如所以:

canvas.setWidth(document.body.scrollWidth / 2.2);
canvas.setHeight(650);

但是我需要调整背景图像本身而不是整个画布的大小,而且我在网上找不到任何描述如何执行此操作的地方。从逻辑上讲,当我最初设置画布背景图像时应该设置如下所示:

var canvas = new fabric.Canvas('canvas', { backgroundImage: "<?php echo $image; } ?>", backgroundImageWidth: "50%", backgroundImageHeight: "100%",}

但这不起作用,我尝试了其他一些方法,例如 setBackgroundImageWidth: 或 backgroundSize: 等......只是在黑暗中拍摄。我找不到任何描述以这种方式设置背景图像大小的 stackoverflow 问题。有谁知道该怎么做吗?

javascript css canvas fabricjs
1个回答
0
投票

无法在fabricJS 的构造函数中指定背景图像的尺寸。当您从 URL 加载图像时,您必须利用 Image 类的

fromURL()
方法来实例化 FabricJS Image,然后您可以将其与
backgroundImage
属性一起使用。

fromURL() 方法接受一个回调函数,该函数应该负责图像的实际大小调整。不幸的是,你不能简单地改变宽度和高度,因为 FabricJS 在内部锁定了宽高比。相反,您必须计算所需的宽度和高度作为比例,并使用图像的

.scaleX
.scaleY
属性。

这是一个例子:

let canvas = document.createElement("canvas");
document.body.appendChild(canvas);
let canv = new fabric.Canvas(canvas, {
    backgroundColor: 'rgba(230, 230, 230, 1)',
    backgroundImage: fabric.Image.fromURL("https://picsum.photos/id/237/400/300", (img) => {

        img.scaleX = canv.width * 0.5 / img.width;
        img.scaleY = canv.height * 0.5 / img.height;

        canv.backgroundImage = img;
        canv.renderAll();
    })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.1/fabric.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.