当前位置: 首页 > 知识库问答 >
问题:

fabricjs在剪裁后将剪裁对象设置为画布的背景

微生俊材
2023-03-14

在我的fabricjs中,我制作了一张画布,在画布上添加了一幅图像,并将图像设置为背景。然后我把卡瓦什剪到一定的宽度和高度。

剪辑完画布后,我想要一个新的画布或相同的画布,以剪裁区域作为背景,所有画布都以其宽度和高度覆盖画布,或者可以制作具有剪裁区域高度和宽度的新画布

目前我正在做这件事。。

function crop(url, name, left, top, width, height, callback) {
    var c = document.createElement('canvas')
    var id = "canvas_" + name
    c.id = id
    var canvas = new fabric.Canvas(id)

    fabric.Image.fromURL(url, function(oImg) {

        oImg.set({
            selectable:false,
        })
        canvas.setDimensions({width:oImg.width, height:oImg.height})
        canvas.add(oImg)
        canvas.clipTo = function (ctx) {
            ctx.rect(left, top, width, height)
            console.log(ctx)
        };
        canvas.centerObject(oImg)
        canvas.renderAll()
        var img = canvas.toDataURL('image/png')
        console.log(img)
        callback(img)
    }, {crossOrigin: "Anonymous"})
}

在这里,我可以轻松地剪辑画布与我给定的左,顶,宽度和高度,但我得到了相同的画布与剪辑部分和删除部分与另一种颜色。但在剪辑后,我希望剪辑的部分画在画布上或设置剪辑的部分作为背景。

我该怎么做??

共有1个答案

傅自明
2023-03-14

实际上,您裁剪了画布的渲染。

要保存裁剪区域,必须使用画布。toDataURL()方法,正如您所看到的,有参数top、left、width、height,只需使用与放入ctx相同的参数即可。rect(left、top、width、height)返回一个表示裁剪区域的字符串(base64编码)。

然后使用这个字符串作为你的画布新的背景图像与Canvas.setBackgrounsImage

您的代码应该看起来像:

function crop(url, name, left, top, width, height, callback) {
    var c = document.createElement('canvas')
    var id = "canvas_" + name
    c.id = id
    var canvas = new fabric.Canvas(id)

    fabric.Image.fromURL(url, function(oImg) {

        oImg.set({
            selectable:false,
        })
        canvas.setDimensions({width:oImg.width, height:oImg.height})
        canvas.add(oImg)
        canvas.centerObject(oImg)
        canvas.renderAll()
        var img = canvas.toDataURL({
                      format: 'image/png',
                      left: left,
                      right: right,
                      width: width,
                      height: height
                  })
        console.log(img)
        canvas.setBackgroundImage(img)
        callback(img)
    }, {crossOrigin: "Anonymous"})
}
 类似资料:
  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 默认情况下,背景颜色的显示范围为 border-box 区域,不重复的背景图像的显示范围为 padding-box 区域,而重复的背景图像的显示范围为 border-box 区域。然而,有时候却希望控制背景的显示范围。 这时,就可以通过 background-clip属性用来定义元素背景的裁剪区域,即背景的显示范围,可选值有 border-box | padding-box | content-b

  • 问题内容: 我有这个HTML: 使用此CSS: 我正在应用的背景图像是200x100像素,但我只想显示200x50像素的背景图像的裁剪部分。 似乎不是正确的CSS属性。我该怎么用呢? 不应使用,因为我在Sprite上下文中使用了上述CSS,在该Sprite上下文中,我要显示的图像部分小于定义CSS的元素。 问题答案: 您可以将图形放置在具有其自身尺寸上下文的伪元素中: 浏览器支持很好,但是如果需要

  • 本文向大家介绍html5-canvas 使用画布裁剪图像,包括了html5-canvas 使用画布裁剪图像的使用技巧和注意事项,需要的朋友参考一下 示例 本示例显示了一个简单的图像裁剪功能,该功能获取图像和裁剪坐标并返回裁剪后的图像。 使用            

  • 问题内容: 我正在尝试裁剪图像,然后将裁剪后的图像粘贴到另一个图像的中心。理想情况下,我希望裁切后的图像小于粘贴的图像,以便在粘贴的图像周围有一个边框,但我不知道这样是否可行。 这是我尝试过的方法(以及由此产生的错误消息): 我可以看到“区域”的大小已设为(0,0),但我不明白为什么。 任何对此的帮助将非常感谢 问题答案: 裁剪方法的PIL文档指出: 返回当前图像的矩形区域。该框是一个四元组,定义

  • 裁剪节点 成员变量 变量 类型 名称 备注 clipRegion number 裁剪区域 无 enableClip boolean 是否开启裁剪 默认true 方法 构造函数 new BK.ClipRectNode(x,y,w,h) 参数 类型 名称 备注 x number 裁剪区域x坐标 y number 裁剪区域y坐标 width number 裁剪区域宽 height number 裁剪区域