【问题标题】:fabric js code not working with newest versionFabric js代码不适用于最新版本
【发布时间】:2021-08-20 21:52:06
【问题描述】:

你好,我找到了这个 JS fiddle (http://jsfiddle.net/efmbrm4v/2/),我真的需要这样的东西才能工作。在小提琴中使用了旧版本的fabric js(1.4.0),我无法让它在新版本(4.4.0)中工作。使用新版本,上传的图像不会保留在创建的 clippingRect 中,但它在整个画布上可见,我需要它仅在 clippingRect 对象中保持可见。有谁知道我应该在代码中更改什么以使其在最新版本上运行?提前致谢。

这是小提琴的代码:

$(document).ready(function() {
    var imageLoader = document.getElementById('imageLoader');
    imageLoader.addEventListener('change', handleImage, false);
});

var canvas = new fabric.Canvas('myCanvas');

var clippingRect = new fabric.Rect({
    left: 100,
    top: 100,
    width: 100,
    height: 100,
    fill: '#DDD',
    opacity: 1,
    selectable: false
});
canvas.add(clippingRect);

function handleImage(e) {
    var reader = new FileReader();
    reader.onload = function(event) {
        var img = new Image();
        img.onload = function() {

            var instanceWidth, instanceHeight;

            instanceWidth = img.width;
            instanceHeight = img.height;

            var imgInstance = new fabric.Image(img, {
                width: instanceWidth,
                height: instanceHeight,
                top: (canvas.getHeight() / 2 - instanceHeight / 2),
                left: (canvas.getWidth() / 2 - instanceWidth / 2),
                originX: 'left',
                originY: 'top'
            });
            canvas.add(imgInstance);
            imgInstance.clipTo = function(ctx) {
                ctx.save();
                ctx.setTransform(1, 0, 0, 1, 0, 0);
                
                clippingRect.render(ctx);
                
                ctx.restore();
            };
            canvas.renderAll();
        };
        img.src = event.target.result;
    };
    reader.readAsDataURL(e.target.files[0]);
}
<canvas id="myCanvas" width="400" height="300" style="border: 1px solid black"></canvas>
<br />
<label>Choose a File:</label>
<br/>
<br />
<input type="file" id="imageLoader" name="imageLoader" />
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

【问题讨论】:

    标签: javascript html5-canvas fabricjs


    【解决方案1】:

    您链接到的示例使用 Fabric 的旧 clipTo 方法,该方法已被更简单、更强大的 clipPath 系统所取代。

    以下是关于如何使用 clipPaths 剪辑对象的 4 部分教程系列。

    【讨论】:

    • 您好,感谢您的回复,我能够使用剪辑路径完成所需的工作。但是我遇到了一个问题。正如在这个小提琴(jsfiddle.net/pf15jbny)中看到的那样,剪辑中加载的图像对背景图像来说是透明的。我发现了一个关于这个的问题,但没有一个明确的答案,至少我不知道该怎么做。 @melchiar
    • 欢迎提出新问题,我会尽力提供帮助
    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多