Fabric.JS 与 Node.JS - 导出为 PNG/JPEG

2024-02-15

所以我只是在玩 Fabric.JS适用于 Node.JS,不适用于 Web,我已经成功制作了一个静态画布,并在上面放置了一个矩形。出口的时间到了。这是我创建画布并添加矩形的代码:

var canvas = new fabric.StaticCanvas(null, {width: 200, height: 200})
var rect = new fabric.Rect({
  left: 100,
  top: 100,
  width: 100,
  height: 50,
  fill: "red"
})
canvas.add(rect)

这是我为导出图像所做的一切尝试:

//Creates a PNG file that isn't generated correctly. It's as if it's corrupt. No program can open it
canvas.createPNGStream().on("data", function (chunk) {
  fs.createWriteStream(__dirname + "/output.png").write(chunk)
})

//Causes a crash
canvas.createJPEGStream().on("data", function (chunk) {
  fs.createWriteStream(__dirname + "/output.jpeg").write(chunk)
})

Error:
C:\Users\me\Documents\my project\node_modules\canvas\lib\jpegstream.js:44
    canvas[method](options.bufsize, options.quality, options.progressive, function(err, chunk){
                  ^

TypeError: canvas[method] is not a function
    at C:\Users\me\Documents\my project\node_modules\canvas\lib\jpegstream.js:44:19
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

//Same thing as first try^^, except it's a JPEG
canvas.createJPEGStream({quality: 100}).pipe(fs.createWriteStream(__dirname + "/output.jpeg"))

//This one makes the PNG file, but when it's opened, its 100% transparent. That's it. The rectangle I added isn't there. Canvas size is correct, however
canvas.createPNGStream().pipe(fs.createWriteStream(__dirname + "/output.png"))

Note: fabric.Canvas(null, {width: 200, height: 200})似乎也完全一样的工作StaticCanvas, 在这种情况下

注2:这段代码:

var canvas = new fabric.createCanvasForNode(200, 200)

结果出现此错误:

var canvas = new fabric.createCanvasForNode(200, 200)
             ^

TypeError: fabric.createCanvasForNode is not a constructor
    at Client.client.on.message (C:\Users\me\Documents\my project\index.js:31:14)
    at emitOne (events.js:115:13)
    at Client.emit (events.js:210:7)
    at MessageCreateHandler.handle (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
    at WebSocketConnection.onPacket (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:330:35)
    at WebSocketConnection.onMessage (C:\Users\me\Documents\my project\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:293:17)
    at WebSocketClient.internalOnMessage (C:\Users\me\Documents\my project\node_modules\uws\uws.js:103:17)
    at native.client.group.onMessage (C:\Users\me\Documents\my project\node_modules\uws\uws.js:57:15)

我在这里缺少什么吗?这些方法似乎都不起作用,这就是我在谷歌上能找到的所有方法。导出图像的正确方法是什么?它可以是 PNG 或 JPEG/JPG,最好是 PNG,但 JPEG/JPG 也可以。确实是任何常见的格式。


找到了答案。canvas.createPNGStream().pipe(fs.createWriteStream(__dirname + "/output.png"))确实有效。它完全是空的,因为它看起来像canvas.add()不是一个瞬时动作。我所做的就是解决这个问题setTimeout()在输出文件之前。希望这对某人有帮助!

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

Fabric.JS 与 Node.JS - 导出为 PNG/JPEG 的相关文章

  • Twisted 的 Deferred 和 JavaScript 中的 Promise 一样吗?

    我开始在一个需要异步编程的项目中使用 Twisted 并且文档非常好 所以我的问题是 Twisted 中的 Deferred 与 Javascript 中的 Promise 相同吗 如果不是 有什么区别 你的问题的答案是Yes and No
  • Node.js 每个用户一个会话

    如何防止我的用户同时从两个设备登录我的系统 因此 如果用户从计算机登录 当他从不同的计算机登录时 首先会自动关闭会话 不需要使其实时 我使用node js express js mongoose passport connect mongo
  • 从 x,y 屏幕空间坐标查找 2D 等距网格上的列、行(将方程转换为函数)

    我试图在屏幕空间点 x y 的二维等距网格中找到行 列 现在我几乎知道我需要做什么 即找到上图中红色向量的长度 然后将其与表示网格边界的向量的长度 由黑色向量表示 进行比较 现在我在数学堆栈交换中寻求帮助 以获得用于计算点 x y 与黑色边
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • v-file-input .click() 不是函数

    我试图以编程方式触发 v file input 的 click 事件 因为它在 Vuetify 的文档中 但它显示一个错误this refs imagePicker click is not a function我在这里错过了什么吗 代码重
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • Express URIError:无法解码参数

    当请求的参数包含时 我将 next js 与自定义 Express 服务器一起使用 它会导致此错误 URIError Failed to decode param faker at decodeURIComponent
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • Node.js 可读流_read用法

    我了解如何在 Node 的 new 中使用可写流Streams2库 但我不明白如何使用可读流 举个例子 一个流包装器围绕dgram module var dgram require dgram var thumbs twiddle func
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐

  • 增加侧边栏宽度或替代方案

    我试图通过脚本在我的侧边栏中显示谷歌地图小部件 但自从新版本的 Google Spreadsheets 以来 我们似乎无法再选择侧边栏的宽度了 Is there a way to force it Or an alternative in
  • 如何在 Tomcat 7 上实现 Socket.io

    我们现有的应用程序托管在 tomcat 6 上 我们正在迁移到提供 websockets 支持的 tomcat 7 我想在我们的应用程序中尝试 socket io 以获得一些基于 websockets 的功能 因为它具有非常好的跨浏览器支持
  • 我的应用与 Google Play 商店中的 Nexus 7 不兼容

    Hii i have submitted an app to playstore but it isn t compatible with Nexus here is my Manifest My App is on List of sup
  • LibreOffice 4.1 Writer:调整表格中列宽的宏

    我正在研究一些适用于表格的 LibreOffice 宏 特别是将每列和行的宽度和高度设置为 0 85 厘米 0 335 英寸 在 MS Office 中 这很简单 只需选择表格并在宏中包含 Selection Rows Height Cen
  • 使用最新版本 Lucene 的示例

    我是 Lucene 的新手 想直接从 Maven 环境中的 Java 代码调用它 我已经尝试了一段时间来寻找可以下载和运行的工作示例 官网最新的教程是2013 Lucene 3 https cwiki apache org confluen
  • 表示可以有子菜单的菜单的数据结构

    例如我可以有这样的东西 A B ba bb C Ca D 现在我有一个 2D 数组 但这不是很通用 因为如果我想将最大子级别从 2 扩展到 3 我需要另一个维度 有什么建议吗 复合模式在这里是一个合适的应用 来自维基百科 http en w
  • 取消设置 $_SESSION 不起作用

    嗨 我编写了一个与 facebook 连接并注册用户的代码 然后它使用户登录 一切都很好 当他们登录时 我设置 SESSION id 我的猜测是 如果未设置此设置 用户将从我的网站注销 并且不会 自动重新连接 因为以前它就像一个循环 每次我
  • 将 get() 与替换函数一起使用

    谁能向我解释为什么会出现以下示例 Create simple dataframe assign df data frame P runif 5 Q runif 5 R runif 5 Return the dataframe from th
  • 无法加载文件或程序集“System.Web.Helpers,IIS 8 上出现错误”

    我有一个 MVC4 Web 应用程序 可以使用本地 IIS Express 服务器在 Visual Studio 2012 上正常运行 当我将应用程序发布到在 Windows 2012 上运行的 IIS 8 Web 服务器时 初始登录页面会
  • 如何从 Microsoft Access 的附件字段查询附件数量?

    我的一位用户有一个 Microsoft Access 数据库 并且在表中他有一个附件字段 在他的一个查询中 他想要返回该字段包含的附件 数量 我试图让它发挥作用 但没有成功 我尝试创建一个 VBA 模块并将字段传递给它 但它对我来说出错了
  • 如何将 cmd python 从 anaconda 更改为默认 python?

    windows powershell 或 cmd 使用 anaconda python 而不是默认的 windows 安装如何让他们使用默认的Python安装 我的操作系统是Windows 8 1蟒蛇3 6蟒蛇蟒蛇3 6 在系统属性中设置默
  • 如何在.net core中进行String.Copy?

    在将 net Framework 应用程序移植到 net core 应用程序时 有一些用途String Copy https msdn microsoft com en us library system string copy v vs
  • 为什么蒙特卡罗树搜索会重置树

    我有一个小但可能很愚蠢的问题蒙特卡罗树搜索 https en wikipedia org wiki Monte Carlo tree search 我理解其中的大部分内容 但一直在研究一些实现 并注意到在给定状态运行 MCTS 并返回最佳移
  • 如何让 SwiftUI 视图在拖动时显示在其他视图前面?

    我正在用新的 更完整的代码更新这个问题 以展示我如何尝试实现下面来自 HunterLion 的答案中的建议 这是问题的原始陈述 我正在使用 SwiftUI 实现 Pentominos 的一个版本 当我将一个片段 视图 拖到板上时 我希望它在
  • 在 Angular 中处理 Accordion 的打开/折叠事件

    如果我有这个代码
  • 通过架构更改从暂存 > 生产中无缝 EF 迁移

    我有一个简单的网络应用程序 它由带有暂存槽和生产槽的 Azure Web 应用程序组成 当不需要考虑数据库迁移时 我可以通过以下方式轻松实现无缝更新 将应用程序部署到暂存区 交换暂存 生产槽位 当我要处理数据库迁移时 这会变得更加棘手 现在
  • 使用 PHP 进行 CURL - 非常慢

    All 我必须请求一个返回 JSON 请求的 URL 我正在使用 PHP 和 CURL 来执行此操作 目前 请求和响应大约需要 3 4 秒 以下是curl代码 ch curl init devnull fopen tmp curlcooki
  • 以Python方式创建列表的列表

    我正在使用列表列表来存储 python 中的矩阵 我尝试按如下方式初始化 2x3 零矩阵 mat 0 2 3 但是 当我更改矩阵中一项的值时 它会更改该条目的值every行 因为每行的 idmat是一样的 例如 分配后 mat 0 0 1
  • 使用spring security时如何在velocity宏中获取csrf令牌

    我正在尝试为启用了 Spring Web Security 的应用程序创建自定义登录屏幕 但我无法弄清楚如何将 csrf 令牌传递给velocity 不 我目前无法使用 JSP 该模型看起来像这样 RequestMapping value
  • Fabric.JS 与 Node.JS - 导出为 PNG/JPEG

    所以我只是在玩 Fabric JS适用于 Node JS 不适用于 Web 我已经成功制作了一个静态画布 并在上面放置了一个矩形 出口的时间到了 这是我创建画布并添加矩形的代码 var canvas new fabric StaticCan