亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

基于html5 canvas做批改作業的小插件

2024-09-05 07:23:28
字體:
來源:轉載
供稿:網友

今天公司有一個新的需求,就是要在返回的作業照片里面可以涂鴉批改,批改完后就連同批改后的照片上傳到服務器。這對我不怎么熟悉canvas的人來說是個挑戰。

需求分析

  1. 能進行批改,就是相當于畫筆
  2. 能進行畫筆的撤回功能
  3. 能進行全部畫筆的清除功能
  4. 可以轉化畫筆的顏色

技術上的實現思路

  在聽到這需求后的第一反應就是用canvas來做,所以我在w3school閱讀了 canvas的API .

1.將圖片轉到canvas,用到API: drawImage()

2畫筆的實現

  • 當按下鼠標(mousedown)記錄開始點startX, startY
  • 當移動鼠標的時候(mousemove)就獲取當前的鼠標的坐標e.clientX, e.clientY,獲取到了當前的坐標后,與上一個點的坐標軸的左邊進行連線(lineTo ),這樣就能畫出了一條橫線了
  • 當鼠標松開左鍵(mouseup)時候,就清除mousemove的函數

3.清除功能:講原始的圖片再次用drawImage()函數來重置
4.撤回功能:在每次按下鼠標那時候,用getImageData()函數獲取當前的圖像記錄到數組里面,然后按撤回則使用putImageData()函數放在canvas
5.畫筆的顏色:在mousemove里面改變strokeStyle筆的顏色

代碼實現

移動鼠標畫出線條的代碼

let self = this;    this.canvasNode = document.createElement('canvas');    let styleString = this.utils.formatStyle(CANVAS_STYLE); // CANVAS_STYLE是canvas的樣式    this.canvasNode.setAttribute('id','canvas');    // 一定要設置這width 和 height    let ratio = this.imgNode.width / this.imgNode.height, height = this.imgNode.height, width = this.imgNode.width;    let tempWidth , tempHeight;    // 按比例伸縮    if(ratio >= window.innerWidth / window.innerHeight){      if(width > window.innerWidth){        tempWidth = window.innerWidth;        tempHeight = height * window.innerWidth / width;      } else {        tempWidth = width;        tempHeight = height;      }    }else{      if(height > window.innerHeight){        tempWidth = width * window.innerHeight / width;        tempHeight = window.innerHeight;      }else{        tempWidth = width;        tempHeight = height;      }    }    this.canvasNode.height = tempHeight;    this.canvasNode.width = tempWidth;    styleString = Object.assign({'width': tempWidth, 'height': tempHeight}, CANVAS_STYLE);    this.canvasNode.setAttribute('style', styleString);    let ctx = this.canvasNode.getContext('2d'), startX = 0, startY = 0;    let image = new Image() ;    image.setAttribute("crossOrigin",'Anonymous')    // 加時間戳因為這圖片的域名沒設置跨域https://www.jianshu.com/p/c3aa975923de    image.src = this.imgNode.src + '?t=' + new Date().getTime();     image.height = tempHeight;    image.width = tempWidth;    image.onload = function(){      ctx.drawImage(image, 0, 0, tempWidth, tempHeight);    }    // 鼠標移動事件    let mousemoveFn = function(e) {      ctx.beginPath();      ctx.lineWidth = 3;      ctx.strokeStyle = self.currentColor;      if(startX == e.clientX - self.canvasNode.offsetLeft || startY ===  e.clientY - self.canvasNode.offsetTop  ) return      ctx.moveTo(startX,startY);      ctx.lineTo(e.clientX - self.canvasNode.offsetLeft , e.clientY - self.canvasNode.offsetTop );      ctx.stroke();      startX = e.clientX - self.canvasNode.offsetLeft;      startY = e.clientY - self.canvasNode.offsetTop ; // 37是header的高度    }    // 鼠標按下事件    this.canvasNode.addEventListener("mousedown",function(e){      startX = e.clientX - self.canvasNode.offsetLeft;      startY = e.clientY - self.canvasNode.offsetTop ;      // 如果在mouseup那里記錄 則在撤回時候要做多一個步驟      let imageData = ctx.getImageData(0,0, self.canvasNode.width, self.canvasNode.height);      self.imageDataArray.push(imageData); // 這imageDataArray用來記錄畫筆的筆畫      self.canvasNode.addEventListener("mousemove", mousemoveFn, false);    },false);    this.canvasNode.addEventListener('mouseup', function(e){      self.canvasNode.removeEventListener('mousemove', mousemoveFn);    });    this.bgNode.appendChild(this.canvasNode);

遇到的問題

1.圖片的跨域問題   因為這個域名只設置了192.168.6.*的跨域,所以我localhost的域名會報跨域的問題(只對192.168.6.*的跨域是同事告訴我的,不然我還在傻乎乎的查問題)

解決辦法:設置vue.congfig.js文件的dev下的host

2.圖片的按比例伸縮完按保存后圖片的尺寸變了   我用toDataURL()方法輸出的base64后的圖片尺寸變了。原因:在我把圖片draw上canvas上時候,用了上面代碼的圖片那比例伸縮的算法把圖片變小了,所以畫在canvas上的圖片也變小了...

解決辦法:(待解決)

總結

  • 第一次接觸canvas與圖片相結合的功能,讓我熟悉了canvas的api
  • 在遇到沒做過的功能之前,一定要先定下心來運用你所知道的知識思考下有沒可行的方法,找到了突破點就可以做了
  • 在你碰上不熟悉的知識時候,一定要先看api,我這canvas之前不怎么會的,之后我細看了幾遍的api,我就可以上手去做功能了,并且在w3school看到的例子讓我覺得canvas真的很強大

到此這篇關于基于html5 canvas做批改作業的小插件的文章就介紹到這了,更多相關canvas 批改作業插件內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人在线电影网| 亚洲欧美日韩中文在线| 国产日韩欧美黄色| 欧美成人精品在线视频| 欧美日韩国产中字| 一本大道久久加勒比香蕉| 国产亚洲欧美aaaa| 一本久久综合亚洲鲁鲁| 欧美精品在线免费播放| 色黄久久久久久| 精品中文视频在线| 日韩精品极品在线观看| 伊人伊成久久人综合网小说| 成人性生交大片免费看视频直播| 国产免费成人av| 日本最新高清不卡中文字幕| 国产视频欧美视频| 九色精品免费永久在线| 国产精品av免费在线观看| 91精品国产综合久久男男| 情事1991在线| 亚洲美女喷白浆| 久久久亚洲精选| 国产精品夜色7777狼人| 国产精品免费视频xxxx| 日韩在线免费高清视频| 人妖精品videosex性欧美| 国产精品吹潮在线观看| 性色av一区二区三区红粉影视| 国产免费亚洲高清| 伊人av综合网| 国产精品爱久久久久久久| 亚洲剧情一区二区| 国产91精品网站| 成人久久一区二区| 亚洲激情视频在线| 成人中文字幕在线观看| 91精品国产一区| 欧美孕妇孕交黑巨大网站| 国产aⅴ夜夜欢一区二区三区| 亚州成人av在线| 国产盗摄xxxx视频xxx69| 久久精品国产久精国产一老狼| 亚洲国产精彩中文乱码av在线播放| 欧美激情a在线| 亚洲欧美成人精品| 国产美女精彩久久| 97久久超碰福利国产精品…| 亚洲xxxx做受欧美| 久久久久久久久电影| 中文字幕亚洲色图| 日韩成人av在线播放| 精品久久久视频| 亚洲精品wwww| 日韩av影视在线| 国内精品免费午夜毛片| 欧美日韩国产va另类| 欧美激情中文字幕乱码免费| 亚洲成色777777女色窝| 奇米成人av国产一区二区三区| 精品日韩美女的视频高清| 亚洲黄色免费三级| 91九色综合久久| 国产视频精品自拍| 国产精品视频大全| 97精品国产97久久久久久免费| 精品免费在线视频| 国产欧美一区二区三区在线| 国产欧美日韩专区发布| 日韩av在线播放资源| 久精品免费视频| 亚洲欧洲成视频免费观看| 日本高清久久天堂| 久久天天躁狠狠躁夜夜躁2014| 这里精品视频免费| 欧美日韩中文在线观看| 中文字幕一精品亚洲无线一区| 国产精品女人网站| 色综合影院在线| 色在人av网站天堂精品| 欧美一区二粉嫩精品国产一线天| 成人黄色av播放免费| 亚洲精品资源在线| 欧美放荡办公室videos4k| 亚洲精品日韩丝袜精品| xvideos成人免费中文版| 不卡av在线播放| 成人亚洲欧美一区二区三区| 久久国产精品影视| 国产精品免费久久久久影院| 日韩在线观看免费全集电视剧网站| 久久精品中文字幕一区| 国产精品极品尤物在线观看| 97超级碰在线看视频免费在线看| 国产欧美精品日韩精品| 久久好看免费视频| 成人性教育视频在线观看| 亚洲美女福利视频网站| 亚洲视频电影图片偷拍一区| 欧美在线视频一二三| 在线观看国产精品日韩av| 欧美成人网在线| 欧美激情免费看| 91精品久久久久| 久久久999精品免费| 97精品在线视频| 国产精品扒开腿做爽爽爽男男| 亚洲深夜福利视频| 亚洲奶大毛多的老太婆| 亚洲伊人一本大道中文字幕| 国产高清视频一区三区| 亚洲一区二区免费| 久久久久久久久久亚洲| 成人有码视频在线播放| 中文字幕久久精品| 91久久精品国产91久久性色| 国产精品扒开腿爽爽爽视频| 在线视频一区二区| 欧美性xxxx极品hd欧美风情| 精品视频久久久久久久| 成人激情在线播放| 一区二区日韩精品| 欧美日韩美女在线观看| 欧美日韩人人澡狠狠躁视频| 91精品综合视频| 国产精品久久久久久婷婷天堂| 九九热99久久久国产盗摄| 久久精品99久久久香蕉| 91av在线免费观看| 欧美激情手机在线视频| 亚洲色图美腿丝袜| 欧美成人免费播放| 日韩欧美国产一区二区| 96精品视频在线| 日韩在线观看av| 欧美成人午夜激情在线| 日韩av在线播放资源| 欧美高清电影在线看| 日本成人在线视频网址| 国产精品va在线| 国产成人精品网站| 成人精品福利视频| 在线成人免费网站| 亚洲精品乱码久久久久久按摩观| 亚洲人精品午夜在线观看| 中文国产亚洲喷潮| 午夜欧美不卡精品aaaaa| 欧美一级成年大片在线观看| 欧美小视频在线观看| 美女视频黄免费的亚洲男人天堂| 国内精品小视频在线观看| 精品国产成人在线| 91极品视频在线| 欧美电影《睫毛膏》| 中文字幕一区二区三区电影| 国产成人在线一区二区| 亚洲欧洲日产国码av系列天堂| 懂色av影视一区二区三区| 亚洲韩国青草视频| 欧美激情一区二区三区在线视频观看| 国产丝袜一区二区三区免费视频| 欧美有码在线视频| 人人澡人人澡人人看欧美| 成人激情黄色网|