實戰fabric.js教程及API

      網友投稿 1501 2022-05-30

      先看效果:

      項目介紹:

      整個頁面是一個vue項目中的組件,使用的主要庫是fabricjs? 官網為http://fabricjs.com/?是一個操作canva和svg的庫

      文檔為英文的.

      后臺系統是nodejs+express 涉及到上傳圖片 session mongodb

      用戶表 圖庫表 設計表,

      前端上傳組件時ivew的

      實戰fabric.js教程及API

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

      // 上傳圖片到圖片倉庫并返回上傳的圖片路徑

      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框架之中間件
      下一篇:Code Review專題:華為云DevCloud助力長沙企業提升代碼質量
      相關文章
      亚洲国产成a人v在线观看| 亚洲乱码无限2021芒果| 亚洲综合精品伊人久久| 亚洲色图.com| 亚洲黄色免费网址| 精品无码一区二区三区亚洲桃色| 亚洲成在人天堂一区二区| 精品久久香蕉国产线看观看亚洲| 亚洲日韩国产成网在线观看| 亚洲日韩在线观看| 在线A亚洲老鸭窝天堂| 亚洲无码在线播放| 亚洲国产精品无码AAA片| 亚洲va无码va在线va天堂| 亚洲AV永久无码精品水牛影视| 久久久久久久尹人综合网亚洲| 国产日韩亚洲大尺度高清| 亚洲精品夜夜夜妓女网| 亚洲va久久久噜噜噜久久男同| 亚洲av中文无码乱人伦在线播放 | 亚洲AV电影院在线观看| 亚洲av午夜福利精品一区人妖| 亚洲国产成人一区二区三区| 久久久久久a亚洲欧洲AV| 亚洲无删减国产精品一区| 亚洲视频在线观看地址| 亚洲中文字幕无码av在线| 亚洲中文字幕久久精品无码A | 亚洲国产精彩中文乱码AV| 亚洲一区免费观看| 亚洲人成影院午夜网站| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 亚洲国产第一页www| 久久亚洲AV无码精品色午夜| 亚洲国产夜色在线观看| 亚洲中文字幕AV每天更新| 精品国产_亚洲人成在线| 亚洲日韩中文在线精品第一| 国产精品久久久亚洲| 97亚洲熟妇自偷自拍另类图片| 亚洲一级毛片视频|