实战fabric.js教程及API

举报
拿我格子衫来 发表于 2022/03/17 22:28:47 2022/03/17
【摘要】 先看效果: 项目介绍: 整个页面是一个vue项目中的组件,使用的主要库是fabricjs  官网为http://fabricjs.com/ 是一个操作canva和svg的库 文档为英文的. 后台系统是nodejs+express 涉及到上传图片 session mongodb 用户表 图库表 设计表, ...

先看效果:

项目介绍:

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

文档为英文的.

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

用户表 图库表 设计表,

前端上传组件时ivew的 

Upload
 

后端使用的是

multer
 

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

实现的效果:

整个页面包含的功能点有

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

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

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

4:导入我的拼图

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

遇到的问题:

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

第一个问题是 如此解决的


  
  1. this.fabricCvs.on('mouse:dblclick', (e) => {
  2. this.fabricCvs.remove(
  3. this.fabricCvs.item(
  4. this.fabricCvs.getObjects().indexOf(e.target)
  5. )
  6. )
  7. })

 

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

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

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

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

crossOrigin: 'anonymous'
 

  
  1. fabric.Image.fromURL(selectedArr[i].imgUrl, (oImg) => {
  2. oImg.scale(0.5)//图片缩小10倍
  3. this.fabricCvs.add(oImg)
  4. }, {crossOrigin: 'anonymous'})

主要用的api:

remove item getObjects

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

 

学到的东西:

图片批量上传,

multer包的使用
 

  
  1. var storage = multer.diskStorage({
  2. destination: function (req, file, cb) {
  3. cb(null, './public/upload')
  4. },
  5. filename: function (req, file, cb) {
  6. var str = file.originalname.split('.')
  7. cb(null, Date.now() + '.' + str[1])
  8. }
  9. })
  10. var upload = multer({storage: storage})
  11. // 上传图片到图片仓库并返回上传的图片路径
  12. router.post('/uploadImgs', upload.array('file', 20), function (req, res, next) {
  13. var arr = []
  14. for (var i in req.files) {
  15. arr.push(global.SERVICEADDRESS + '' + req.files[i].filename)
  16. }
  17. res.json({
  18. code: 200,
  19. data: arr
  20. })
  21. })

 

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

 


  
  1. pictureStore.updateOnePictureStore({_id: req.body.storeId}, {$addToSet: {pictureUrlArr: {$each: pictureUrlArr}}}, (err, data) => {
  2. if (!err) {
  3. return RETURNSUCCESS(res, data)
  4. } else {
  5. return RETURNFAIL(res, err)
  6. }
  7. })

 

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

谢谢阅读.如果觉得对你有帮助请记得点赞或收藏.欢迎留言讨论.你的支持是我出产优秀博客的动力.

 

请尊重他人劳动成果, 如需转载,请私信我,禁止私自转载

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/82661952

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。