【问题标题】:How can I add an image from my computer behind an already set image with Fabric.JS?如何使用 Fabric.JS 在已设置的图像后面添加计算机中的图像?
【发布时间】:2018-01-22 16:41:48
【问题描述】:

我有一个内部透明框架的图像。它使用 CSS 设置为我的画布的背景。我可以将图像添加到我的画布,但希望一次只能将一个图像添加到框架的透明部分后面。我怎么能做到这一点?提前谢谢!

var id = document.getElementById('rectangle') && rectangle ||
  document.getElementById('anotherCanvas') && anotherCanvas;
var canvas = new fabric.Canvas(id);

document.getElementById('file').addEventListener("change", function (e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = function (f) {
        var data = f.target.result;
        fabric.Image.fromURL(data, function (img) {
            var oImg = img.set({
                width: 125,
                height: 170
            })
            canvas.add(oImg).renderAll();
            var a = canvas.setActiveObject(oImg);
            var dataURL = canvas.toDataURL({
                format: 'png',
                quality: 1
            });
        });
    };
    reader.readAsDataURL(file);
});
canvas {
  border: 1px solid #808080;
  border-radius: 1px;
}

#rectangle {
  background: url(http://i.imgur.com/0Mt6ho1.png);
  background-size: contain;
  background-repeat: no-repeat;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.min.js"></script>
<input type="file" id="file"><br />
<canvas id="rectangle" width="637" height="412"></canvas>

【问题讨论】:

    标签: javascript css fabricjs


    【解决方案1】:

    请添加到您的 fabricjs 图像对象的左上属性:

    var oImg = img.set({
                    width: 125,
                    height: 170,
                    left: 430,
                    top: 65
                })
    

    要在您身后制作上传的图片,不应使用背景图片。您应该插入没有控件的常规图像。像这样的:

    fabric.Image.fromURL('http://i.imgur.com/0Mt6ho1.png', function (img) {
                var oImg = img.set({
                    scaleX: 0.2,
                    scaleY: 0.2,
                    selectable: false
                })
                canvas.add(oImg).renderAll();
               });
    

    那么当你上传图片的时候,你需要让它被选中,移到后面,取消选中:

    fabric.Image.fromURL(data, function (img) {
                var oImg = img.set({
                    width: 125,
                    height: 170,
                    left: 430,
                    top: 65
                })
                canvas.add(oImg);
                canvas.setActiveObject(oImg);
                var image = canvas.getActiveObject();
                image.moveTo(-1);
                canvas.discardActiveObject();
                canvas.renderAll(); 
            });
    

    如果您将使用鼠标选择对象,它会自动将您的对象移动到顶部,但是当您取消选择时 - 它会再次移动。

    查看fiddle

    【讨论】:

    • 这会将其放置在正确的位置,但不会放在框架后面
    • 如果我要使用它来设置图像而不是背景,如何使用 JS 分配不同的图像在不同的画布上显示?例如,现在我正在使用 CSS 来控制不同的画布背景。
    • 您需要像上面的代码一样将图像单独添加到每个画布。
    • 好的,所以我可以用 var canvas = new fabric.Canvas('oval'); var canvas = new fabric.Canvas('rectangle'); 之类的东西声明两个画布
    • 你可以,但你会失去对第一个画布的参考。为 2 个不同的画布声明 2 个不同的变量。如果您想问什么,请创建新主题。
    猜你喜欢
    • 2015-10-16
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多