vue下canvas裁剪圖片實(shí)例講解
由于時(shí)間關(guān)系 代碼沒有做整理大家有什么不懂得可以留言;
代碼的主題思路備注中都有 大家可以看看
我的博客中還有關(guān)于canvas繪制矩形的文章有需要的可以看一下;
HTML代碼:
第一行的canvas為裁剪后展示用;div中的canvas存放原有尺寸的圖片
<canvas style=' position: absolute; margin: 2px 0 0 0'></canvas><div style=' display:none;'><canvas :src='http://www.baoyu77737.com/bcjs/leftImg.carImgUrl' height='1080'></canvas></div>
JS截取圖片方法
1裁剪方法傳參
oMark2[’canvas1’] = ’canvasImg2’; // 展示結(jié)果canvas idoMark2[’canvas2’] = ’dymCurrImg2’; //畫布原始圖片canvas idoMark2[’ImgUrl’] = carImgUrl;oMark2[’offsetLeft’] = location[0];oMark2[’offsetTop’] = location[2];oMark2[’offsetWidth’] = location[1] - location[0];oMark2[’offsetHeight’] = location[3] - location[2];
2裁剪方法 (注意:下邊方法中關(guān)于構(gòu)建的畫布 canvas1,canvas3與兩個(gè)canvas標(biāo)簽ID的命名是不對(duì)應(yīng)的,方便大家理解我把關(guān)系捋出來(lái)
canvas1 = oMark[’canvas2’] = ’dymCurrImg2’
canvas3 = oMark[’canvas1’] = ’canvasImg2’
TailoringImg(oMark) { // 設(shè)置三個(gè)canvas 分別為 canvas1 ,canvas2,canvas3 // 每個(gè)canvas的作用 canvas1原始圖片畫布(頁(yè)面中隱藏); // canvas2原圖和裁剪結(jié)果之間轉(zhuǎn)換; // canvas3裁剪之后的結(jié)果展示(頁(yè)面中展示); let res2 = oMark[’ImgUrl’]; let that = this; return new Promise(function (resolve, reject) { //圖片剪切處理 var canvas1 = document.getElementById(oMark[’canvas2’]); var canvas3 = document.getElementById(oMark[’canvas1’]); canvas1.height = 1080; canvas1.width = 1920; canvas3.height = 198; canvas3.width = 400; var cxt1 = canvas1.getContext('2d'); // getContext() 方法返回一個(gè)用于在畫布上繪圖的環(huán)境 var img = new Image(); img.crossOrigin = ’’; img.src = res2; var canvas2 = document.createElement('canvas'); // 創(chuàng)建虛擬畫布環(huán)境 var cxt2 = canvas2.getContext('2d'); img.onload = function () { // 計(jì)算圖片縮放比例 var Rwidth = canvas1.width / img.width; var Rheight = canvas1.height / img.height; cxt1.drawImage(img, 0, 0, canvas1.width, canvas1.height); // --第一步-- 原圖繪制在畫布上 drawImage方法在畫布上繪制圖像、畫布或視頻。也能夠繪制圖像的某些部分,以及/或者增加或減少圖像的尺寸。// 計(jì)算縮放好后的尺寸 var srcX = oMark.offsetLeft * Rwidth; var srcY = oMark.offsetTop * Rheight; var sWidth = oMark.offsetWidth * Rwidth; var sHeight = oMark.offsetHeight * Rheight; var dataImg = cxt1.getImageData(srcX, srcY, sWidth, sHeight); // --第二步-- getImageData() 復(fù)制原圖畫布上指定矩形的像素?cái)?shù)據(jù) canvas2.width = sWidth; canvas2.height = sHeight; cxt2.putImageData(dataImg, 0, 0, 0, 0, canvas2.width, canvas2.height); // --第三步-- 通過 putImageData() 將原圖圖像數(shù)據(jù)放到canvas2畫布中 var img2 = canvas2.toDataURL('image/png'); // --第四步-- toDataURL()將canvas2畫布保存為圖像 var cxt3 = canvas3.getContext('2d'); // getContext() 方法返回一個(gè)用于在畫布上繪圖的環(huán)境 var img3 = new Image(); // 創(chuàng)建圖像對(duì)象 img3.crossOrigin = ’’; // 圖像跨域設(shè)置 img3.src = img2; // 設(shè)置圖像地址 img3.onload = function () { // onload內(nèi)可以獲取圖像信息 cxt3.drawImage(img3, 0, 0, canvas3.width, canvas3.height) // --第五步-- 將canvas2畫布生成的圖像放在canvas3畫布中 }; resolve(); } }) },
到此這篇關(guān)于vue下canvas裁剪圖片實(shí)例講解的文章就介紹到這了,更多相關(guān)vue下canvas裁剪圖片內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 不同瀏覽器對(duì)XML的解析是不同的2. XML入門的常見問題(一)3. asp使用Weekday函數(shù)計(jì)算項(xiàng)目的結(jié)束時(shí)間4. 告別AJAX實(shí)現(xiàn)無(wú)刷新提交表單5. 讀寫xml文件的2個(gè)小函數(shù)6. asp讀取xml文件和記數(shù)7. IE6/IE7/IE8/IE9中tbody的innerHTML不能賦值的完美解決方案8. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案9. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向10. ASP中if語(yǔ)句、select 、while循環(huán)的使用方法
