前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战fabric.js教程及API

实战fabric.js教程及API

作者头像
拿我格子衫来
发布2022-01-24 08:54:02
2.1K0
发布2022-01-24 08:54:02
举报
文章被收录于专栏:TopFE

先看效果:

项目介绍:

整个页面是一个vue项目中的组件,使用的主要库是fabricjs 官网为http://fabricjs.com/ 是一个操作canva和svg的库

文档为英文的.

后台系统是nodejs+express 涉及到上传图片 session mongodb

用户表 图库表 设计表,

前端上传组件时ivew的

代码语言:javascript
复制
Upload

后端使用的是

代码语言:javascript
复制
multer

可以说麻雀虽小,五脏俱全 前后端分离,使用mongodb数据库 图片上传到文件夹内

实现的效果:

整个页面包含的功能点有

1:上传图片 可旋转,扩大,缩小,删除,拖动

2:选取图片导入 批量上传,可以上传到自己的图库

3:保存拼图 导出我的设计,生成缩略图,可以导入以前的数据

4:导入我的拼图

5:改变背景 可以使用背景图片,也可以使用颜色

遇到的问题:

  1. 双击删除的功能,获取当前事件的对象并获取在整体中的索引,删除.
  2. canva无法生成png图片 报错

第一个问题是 如此解决的

代码语言:javascript
复制
        this.fabricCvs.on('mouse:dblclick', (e) => {
          this.fabricCvs.remove(
            this.fabricCvs.item(
              this.fabricCvs.getObjects().indexOf(e.target)
            )
          )
        })

remove: 删除一个对象 参数为数组的索引

item:获取一个对象在数组中的索引

第二个问题是 由于canvas上对于引入的图片有跨域的限制,不能转化外域的图片数据

解决办法是在引入图片的时候 设置

代码语言:javascript
复制
crossOrigin: 'anonymous'
代码语言:javascript
复制
          fabric.Image.fromURL(selectedArr[i].imgUrl, (oImg) => {
            oImg.scale(0.5)//图片缩小10倍
            this.fabricCvs.add(oImg)
          }, {crossOrigin: 'anonymous'})

主要用的api:

remove item getObjects

代码语言:javascript
复制
Image.fromURL   更加url生成一个图片对象
代码语言:javascript
复制
add  添加对象
代码语言:javascript
复制
getSelectionContext  获取选中内容
代码语言:javascript
复制
clear  清空内容
代码语言:javascript
复制
setBackgroundColor  设置背景颜色 背景图
代码语言:javascript
复制
renderAll  重新渲染
代码语言:javascript
复制
toDataURL  转化成base64
代码语言:javascript
复制
loadFromJSON 转化为json

学到的东西:

图片批量上传,

代码语言:javascript
复制
multer包的使用
代码语言:javascript
复制
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/upload')
  },
  filename: function (req, file, cb) {
    var str = file.originalname.split('.')
    cb(null, Date.now() + '.' + str[1])
  }
})
var upload = multer({storage: storage})

// 上传图片到图片仓库并返回上传的图片路径
router.post('/uploadImgs', upload.array('file', 20), function (req, res, next) {
  var arr = []
  for (var i in req.files) {
    arr.push(global.SERVICEADDRESS + '' + req.files[i].filename)
  }
  res.json({
    code: 200,
    data: arr
  })
})

mongodb对于数组的批量插入操作

代码语言:javascript
复制
 pictureStore.updateOnePictureStore({_id: req.body.storeId}, {$addToSet: {pictureUrlArr: {$each: pictureUrlArr}}}, (err, data) => {
      if (!err) {
        return RETURNSUCCESS(res, data)
      } else {
        return RETURNFAIL(res, err)
      }
    })

fabric.js API的使用 以及能实现的功能预览

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目介绍:
  • 实现的效果:
  • 遇到的问题:
  • 主要用的api:
  • 学到的东西:
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档