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

2023-12-19

在我的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"})
}

在这里,我可以轻松地用给定的左侧、顶部、宽度和高度来剪辑画布,但我得到了相同的画布,其中剪辑的剪辑部分和删除的部分具有另一种颜色。但在剪辑后,我希望将剪辑的部分绘制在画布上或将剪辑的部分设置为背景。

我怎样才能做到这一点 ??


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

要保存裁剪区域,您必须使用Canvas.toDataURL() 方法 http://fabricjs.com/docs/fabric.Canvas.html#toDataURL,如你所见,有参数top, left, width, height只需使用与您输入相同的内容即可ctx.rect(left, top, width, height)它会返回一个表示裁剪区域的字符串(base64 编码)。

然后使用这个字符串作为画布的新背景图像Canvas.setBackgroundImage http://fabricjs.com/docs/fabric.Canvas.html#setBackgroundImage

您的代码应如下所示:

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"})
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

裁剪后,fabricjs 将裁剪的对象设置为画布的背景 的相关文章

随机推荐

  • 使用 PHP-memcache 针对 memcached 进行会话故障转移

    同事 我正在运行 php 5 3 5 3 8 和 memcache 2 2 6 客户端库 http pecl php net package memcache 来处理 memcached 服务器 我的目标是为会话引擎提供故障转移解决方案 即
  • 查询行继承自的父表时获取行的源表的名称

    我有一个 Postgres 数据库 其中有几个相互继承的表 我可以SELECT从父表获取其所有子表的结果 但需要获取每个结果源自的表的名称 找到的方法here https stackoverflow com questions 170165
  • 为什么网络字节顺序定义为大端? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Firebase Crashlytics 未在控制台仪表板中快速显示崩溃报告

    我已经在 Firebase Dashboard 上设置了所有这些步骤和捆绑 ID 并多次尝试崩溃 但没有收到任何报告 pod Firebase Core pod Fabric gt 1 7 2 pod Crashlytics gt 3 9
  • Backbone.js 更改 url 而不重新加载页面

    我有一个带有用户页面的网站 该页面上有几个链接 可让您浏览用户的个人资料 我想做到这一点 当点击其中一个链接时 网址会发生变化 但包含用户横幅的页面的前三分之一不会重新加载 我正在使用 Backbone js 我有一种感觉 我正处于这样一种
  • 如何用Java编写可靠的纯聚合(组合)游戏对象?

    所以我刚刚开始用 Java 编写游戏 并且正在编写我的游戏对象 现在我已经读到这里了发展你的层次结构 http cowboyprogramming com 2007 01 05 evolve your heirachy 您应该将游戏构建为组
  • 如何重写子类的 swift 协议函数(例如 UIView 中的 UILabel)

    我正在尝试实现一个扩展函数 该函数应该根据使用它的类的类型而有所不同 这些对象必须是 UIView 或子类 它应该始终使用在指定类型上扩展的函数 但如果它不符合其中任何一个 则应该使用 UIView 方法 作为后备 这是我正在尝试做的事情的
  • 如何在循环中构建动态 AND OR linq 表达式树

    继从previous https stackoverflow com questions 9718805 how to build a dynamic linq expression tree in a loop 9718896 97188
  • 如何在 Spring boot 2 + Webflux + Thymeleaf 中配置 i18n?

    我刚刚开始一个基于 Spring boot 2 Webflux 的新项目 关于spring boot版本升级及替换spring boot starter web with spring boot starter webflux像这样的课程
  • 在运行时动态更新规则。流口水+弹簧靴

    所以目前我正在练习将 Drools 7 13 0 Final 与 Spring boot 1 5 12 RELEASE 一起使用 我用以下类在 Spring boot 中制作了一个示例应用程序 模型 TaxiFare java Data p
  • GC规则:如何判断一个java对象是否适合垃圾回收

    任何人都可以向我指出一组已定义的规则 以找出 Java 对象垃圾收集的资格以及一个简单的示例 对象一旦不再存在就可以进行 GC可达的来自任何线程 如果满足以下任一条件 则可以从另一个对象 A 访问对象 O A 引用了 O 或者 A 具有对
  • 将临时字符数组转换为 D 中的字符串

    我正在学习 D 语言 我很了解 C 我想做一些 Windows 特定的东西 所以我写这个只是为了尝试 API import core sys windows windows import std stdio string name char
  • Cosmos DB:网关无法直接服务跨分区查询

    知道为什么当我使用其余 api 在 Cosmos DB 中执行下面的查询时 我收到以下错误 没有 order by 的相同查询工作正常 我已经设置了标题 x ms documentdb query enablecrosspartition
  • 如何将 pd.concat 与未启动的数据帧一起使用?

    我希望能够在数据帧结果通过一个函数时将它们连接到内存中 并最终得到一个只有结果的全新数据帧 在函数之前没有准备好数据帧的情况下 如何执行此操作 例如 import pandas as pd import numpy as np rand d
  • 当以双精度形式传递浮点值时,双精度

    我对双精度有疑问 当将浮点值传递给双精度时 我会得到一些不同的结果 例如 float f 54 23f double d1 f System out println d1 输出为 54 22999954223633 有人可以解释这种行为背后
  • ASP.NET Web API 2 文件上传

    我想知道如何最好地处理文件上传以及添加到要使用 ASP NET Web API 2 上传的文件而不使用 MVC 组件的附加信息 我用谷歌搜索了网络 我可以告诉你我比我想象的更困惑 附加信息将存储在数据库和磁盘上的文件中 到目前为止 我正在构
  • 在单独的进程中运行 python

    我正在寻找一个快速的 bash 脚本或程序 它允许我在单独的进程中启动 python 脚本 最好的方法是什么 我知道这非常简单 只是好奇是否有首选方法 只需使用与号 即可在后台启动 Python 进程 Python 已经在与 BASH 脚本
  • 如何使用 asp.net http 客户端使用 retry-after 标头来轮询 API

    我对在 net 中使用 http 客户端进行 RESTful 消费不太熟悉 并且在轮询外部 API 时无法理解如何使用 retry after 标头 这是我目前必须调查的 HttpResponseMessage result null va
  • cURL 不会提示我使用 GitHub API 输入密码

    我正在跟进GitHub 的教程 https developer github com guides getting started 关于使用他们的 API 在我的 Git Bash 命令提示符中 我输入以下内容 curl i https a
  • 裁剪后,fabricjs 将裁剪的对象设置为画布的背景

    在我的fabricjs中 我正在制作画布并向其添加图像并将图像设置为背景 然后我将卡瓦斯剪裁到一定的宽度和高度 裁剪画布后 我想要一个新的画布或以裁剪区域作为背景的相同画布 全部覆盖画布的宽度和高度 或者可以使用裁剪区域的高度和宽度制作新画