裁剪后,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 将裁剪的对象设置为画布的背景 的相关文章

  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • Javascript 对象属性名称

    在 C 中 可以将对象属性的名称作为字符串值获取 名称 对象 Property gt myProperty 这可以在 Javascript Typescript 中完成吗 Object Keys 是我找到的唯一东西 但它给了我所有的键 示例
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 如何通过setTimeout函数定期打印数字?

    var i 0 function counter for i i lt 100 i setTimeout gt console log i 2000 counter 我想以 2 秒的间隔打印 i 但它立即打印 每次打印调用只需要几微秒 为什
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • Angular JS - 使服务可以从控制器和视图全局访问

    假设我们有以下服务 myApp factory FooService function 然后 从控制器中 我会说 myApp controller FooCtrl scope FooService function scope FooSer
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在反应中访问回调内的 event.target

    我有以下课程片段 constructor props super props this timeout null search e gt clearTimeout this timeout this timeout setTimeout f
  • Firebase + Node.js:错误:找不到 XMLHttpRequest 兼容性库

    Firebase Node js On iOS 安装的 Node js npm 安装 firebase save 节点测试 js 其中 test js 是一个非常简单的连接到 Firebase 的脚本 var firebase requir
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h

随机推荐

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