实战fabric.js教程及API

网友投稿 1297 2022-05-30

先看效果:

项目介绍:

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

文档为英文的.

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

用户表 图库表 设计表,

前端上传组件时ivew的

Upload

后端使用的是

multer

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

实现的效果:

整个页面包含的功能点有

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

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

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

4:导入我的拼图

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

遇到的问题:

双击删除的功能,获取当前事件的对象并获取在整体中的索引,删除.

canva无法生成png图片 报错

第一个问题是 如此解决的

this.fabricCvs.on('mouse:dblclick', (e) => {

this.fabricCvs.remove(

this.fabricCvs.item(

this.fabricCvs.getObjects().indexOf(e.target)

)

)

})

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

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

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

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

crossOrigin: 'anonymous'

fabric.Image.fromURL(selectedArr[i].imgUrl, (oImg) => {

oImg.scale(0.5)//图片缩小10倍

this.fabricCvs.add(oImg)

}, {crossOrigin: 'anonymous'})

主要用的api:

remove item getObjects

Image.fromURL 更加url生成一个图片对象

add 添加对象

getSelectionContext 获取选中内容

clear 清空内容

setBackgroundColor 设置背景颜色 背景图

renderAll 重新渲染

toDataURL 转化成base64

loadFromJSON 转化为json

学到的东西:

图片批量上传,

multer包的使用

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})

// 上传图片到图片仓库并返回上传的图片路径

实战fabric.js教程及API

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对于数组的批量插入操作

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的使用 以及能实现的功能预览

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

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

API JavaScript

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【愚公系列】2022年01月 Python教学课程 51-Django框架之中间件
下一篇:一日一技:在 MongoDB 中,如何批量更新不同数据为不同值?
相关文章