亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁(yè) > 知識(shí)庫(kù) > Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)

Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)

熱門(mén)標(biāo)簽:機(jī)器人外呼系統(tǒng)存在哪些能力 南昌仁和怎么申請(qǐng)開(kāi)通400電話 電話機(jī)器人電銷(xiāo)系統(tǒng)掙話費(fèi) 高德地圖標(biāo)注地點(diǎn)糾錯(cuò) 拓展地圖標(biāo)注 如何獲取地圖標(biāo)注客戶 只辦理400電話 平?jīng)龅貓D標(biāo)注位置怎么弄 電話機(jī)器人黑斑馬免費(fèi)

本文主要記錄 canvas 在圖像、文字處理、離屏技術(shù)和放大鏡特效的實(shí)現(xiàn)過(guò)程中使用到的API。先看下效果吧:

一張模糊的圖片:

鼠標(biāo)點(diǎn)擊任意位置,產(chǎn)生放大效果:

哇塞~ 一個(gè)帥哥,哈哈哈哈~

1、放大鏡原理

實(shí)現(xiàn)效果:如上圖,點(diǎn)擊或點(diǎn)擊滑動(dòng)鼠標(biāo)顯示一個(gè)區(qū)域,區(qū)域中顯示對(duì)應(yīng)點(diǎn)擊部分范圍的放大清晰圖片。那么問(wèn)題就可以肢解為3部分:

1、如何在canvas(模糊圖)上再畫(huà)出另外一個(gè)canvas(清晰放大圖);

2、如何將canvas中顯示的(清晰放大圖)剪切出圓形區(qū)域。

3、如何在鼠標(biāo)點(diǎn)擊滑動(dòng)的時(shí)候顯示該區(qū)域;

 

2、顯示模糊照片

其實(shí)一般的交互不是模糊照片,這里我只是為了夸張下效果,用了張模糊的原圖,哈哈哈,canvas本身是可以對(duì)清晰的圖片做濾鏡處理,涉及到很多圖形學(xué)的算法,然后我不會(huì),默默的打開(kāi)了PS手動(dòng)高斯模糊了一張照片...嗯,沒(méi)毛病!

首先定義一個(gè) canvas 元素

  <canvas id="canvas"></canvas>
//定義canvas畫(huà)布
var canvas1 = document.getElementById('canvas1');
    ctx1 = canvas.getContext('2d');

//模糊圖片加載
var image1 = new Image();
image1.src = "./模糊.png";

//圖片加載成功后繪制圖片
image1.onload = function() {
  //drawImage 在畫(huà)布上繪制模糊圖片
  ctx1.drawImage(image1, 0, 0, canvas1.width, canvas1.height);
};     

ctx1.drawImage(圖片,x位置,y位置,圖片顯示寬度,圖片顯示高度)

3、加載清晰圖片

我們?cè)偌右粋€(gè)canvas(放大鏡看到的圖片),初始隱藏:

<canvas id="canvas2" style="display:none"></canvas>
var canvas2 = document.getElementById('canvas2'),
    ctx2 = canvas2.getContext('2d'),
    scale = 2; // 放大倍數(shù)

// canvas2的圖片大小是模糊圖片的2倍
canvas2.width = canvas.width * scale;
canvas2.height = canvas.height * scale;

// 在canvas2中加載圖片
var image2 = new Image();
image2.src = "name2.png";

image2.onload = function() {
  ctx2.drawImage(image2, 0, 0, canvas2.width, canvas2.height);
};

4、顯示放大鏡

4.1 繪制放大鏡

鼠標(biāo)所處的位置點(diǎn)(x,y)是區(qū)域的中心,計(jì)算出清晰圖所在的位置點(diǎn),截取圓形

// 保存當(dāng)前狀態(tài)
ctx1.save();
// 邊框
ctx1.strokeStyle = "#9eddf1";
ctx1.lineWidth = 3;
// 開(kāi)始繪制
ctx1.beginPath();
// ⚪
ctx1.arc(x, y, mr, 0, Math.PI * 2);
ctx1.stroke();
// 表示剪切
ctx1.clip();

// 畫(huà)圖
ctx1.drawImage(that.canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);

// 釋放當(dāng)前狀態(tài)
ctx1.restore();

繪制狀態(tài)的最佳搭檔save()和restore():用于對(duì)當(dāng)前狀態(tài)的保存及釋放不影響其他操作;可用于重復(fù)的繪制圖形的變化過(guò)程;

clip():表示剪切區(qū)域

4.2 離屏技術(shù)

所謂的離屏技術(shù)就是在一個(gè)canvas上繪制另外一個(gè)canvas,前面使用的繪制圖片的API是 drawImage() ,它分別可以支持,3個(gè)、5個(gè)和9個(gè)參數(shù); 其中第一個(gè)參數(shù)既可以是圖片,也可以是canvas對(duì)象!那么我們就可以使用這個(gè)方法,在圓上繪制出清晰圖了~

// 圓的半徑是mr
var mr = 100;

// 對(duì)應(yīng)模糊圖的左上角起點(diǎn)
var dx = x - mr,
    dy = y - mr;

// 找出清晰圖截圖的左上角起點(diǎn)
var sx = x * scale - mr,
    sy = y * scale- mr;

   ...
    ctx.clip();
    // 在對(duì)應(yīng)的位置上重新繪制圖片
    //drawImage(img,sx,sy,swidth,sheight,x,y,width,height) 9個(gè)參數(shù)時(shí)
    //img: 圖片/canvas
    //sx: 圖片的X起點(diǎn)
    //sy: 圖片的Y起點(diǎn)
    //swidth:要繪制的圖片選取的寬度
    //sheight:要繪制的圖片選取的高度
    //x,y:圖片在canvas上顯示的位置
    //width,height:在Canvas上要顯示的大小
    ctx1.drawImage(canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);    
    ...

5、鼠標(biāo)交互事件

效果:鼠標(biāo)點(diǎn)擊并滑動(dòng)鼠標(biāo)產(chǎn)生反應(yīng),松開(kāi)鼠標(biāo)或者移除畫(huà)布則失效。

//定義一個(gè)判斷鼠標(biāo)是否是點(diǎn)擊滑動(dòng)的標(biāo)識(shí)符
var flag;

//鼠標(biāo)點(diǎn)入事件
canvas.onmousedown = function(e) {
  flag = true;
  //顯示放大鏡
}
// 鼠標(biāo)移動(dòng)事件
canvas.onmousemove = function(e) {
  if (flag) {
    //顯示放大鏡
  }
}
//鼠標(biāo)松開(kāi)事件
canvas.onmouseup = function(e) {
  flag = false;
  // 隱藏放大鏡
}
//鼠標(biāo)離開(kāi)事件
canvas.onmouseout = function(e) {
  flag = false;
  // 隱藏放大鏡
}

完整代碼:

var scale = 3;
var mr = 150;
var photo = {
  //初始化
  init: function() {
    var that = this;

    that.canvas = document.getElementById('canvas');
    that.ctx = that.canvas.getContext('2d');

    that.canvas2 = document.getElementById('canvas2');
    that.ctx2 = that.canvas2.getContext('2d');

    that.canvas.width = 800;
    that.canvas.height = 500;

    that.canvas2.width = that.canvas.width * scale;
    that.canvas2.height = that.canvas.height * scale;
    that.image1 = new Image();
    that.image1.src = "./name3.jpg";

    that.image2 = new Image();
    that.image2.src = "./name4.jpg";

    that.image1.onload = function() {
      that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
    };

    that.image2.onload = function() {
      that.ctx2.drawImage(that.image2, 0, 0, that.canvas2.width, that.canvas2.height);
      that.moveEvt();
    };
  },

  bigerImage: function(x, y) {
    var that = this;
    var imageX = x * scale,
      imageY = y * scale,
      sx = imageX - mr,
      sy = imageY - mr;

    var dx = x - mr,
      dy = y - mr;

    that.ctx.save();

    that.ctx.strokeStyle = "#9eddf1";
    that.ctx.lineWidth = 3;

    that.ctx.beginPath();
    that.ctx.arc(x, y, mr, 0, Math.PI * 2);


    that.ctx.shadowColor = "#6ed25b";
    that.ctx.shadowBlur = 10;

    that.ctx.stroke();
    that.ctx.clip();

    that.ctx.drawImage(that.canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);

    that.ctx.restore();
  },

  //移動(dòng)
  moveEvt: function() {
    var that = this;
    that.canvas.onmousedown = function(e) {
    	that.flag = true;
      that.showImage(e);
    }

    that.canvas.onmousemove = function(e) {
      if (that.flag) {
        that.showImage(e)
      }
    }

    that.canvas.onmouseup = function(e) {
      that.hideImage(e)
    }

    that.canvas.onmouseout = function(e) {
      that.hideImage(e)
    }
  },

  showImage: function(e) {
    e.preventDefault()
    var x = e.offsetX,
      y = e.offsetY,
      that = this;
    that.ctx.clearRect(0, 0, that.canvas.width, that.canvas.height);
    that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
    that.bigerImage(x, y);
  },

  hideImage: function(e) {
    e.preventDefault()
    var that = this;
    
    that.flag = false;
    that.ctx.clearRect(0, 0, that.canvas.width, that.canvas.height);
    that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
  }
}

window.onload = function() {
  photo.init();
}

到此這篇關(guān)于Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)的文章就介紹到這了,更多相關(guān)Canvas 放大鏡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:池州 永州 棗莊 漯河 新疆 青島 遼源 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)》,本文關(guān)鍵詞  Canvas,實(shí)現(xiàn),放大鏡,效果,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产伦久视频免费观看 视频| a级黄色毛片免费播放视频| 91麻豆tv| 韩国妈妈的朋友在线播放| 日日日夜夜操| 日韩在线观看视频免费| 精品在线观看一区| 国产精品自拍一区| 免费国产在线视频| 台湾毛片| 亚洲精品久久久中文字| 青青久久精品| 国产网站在线| 精品国产一区二区三区精东影业| 99久久精品国产国产毛片| 国产不卡在线观看视频| 免费国产一级特黄aa大片在线| 日本免费看视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 韩国三级视频网站| 国产国语对白一级毛片| 日韩免费在线| 国产伦精品一区二区三区在线观看| 亚飞与亚基在线观看| 一级毛片视频免费| 国产一区二区精品在线观看| 黄视频网站在线看| 日本伦理黄色大片在线观看网站| 青青久在线视频| 人人干人人草| 国产美女在线观看| 日日夜夜婷婷| 国产高清在线精品一区二区| 亚洲 欧美 91| 日韩av片免费播放| 欧美18性精品| 九九干| 欧美1区| 久久精品人人做人人爽97| 国产精品自拍一区| 四虎精品在线观看| 久久国产精品自线拍免费| 一级女性全黄生活片免费| 黄视频网站在线免费观看| 亚洲 国产精品 日韩| 深夜做爰性大片中文| 99久久精品国产麻豆| 欧美a级片免费看| 国产精品自拍在线| 国产不卡福利| 九九久久99综合一区二区| 99热精品一区| 四虎影视库| 国产不卡在线观看| 国产不卡精品一区二区三区| 黄视频网站在线免费观看| 精品在线视频播放| 黄色免费网站在线| 99久久精品国产免费| 日韩在线观看免费完整版视频| 天天做日日爱| 国产精品123| 国产成人精品综合| 国产精品自拍一区| 国产不卡精品一区二区三区| 99久久精品国产高清一区二区| 日韩欧美一及在线播放| 日本特黄特色aaa大片免费| 99久久精品国产免费| 日本免费乱人伦在线观看| 欧美电影免费| 韩国妈妈的朋友在线播放| 日韩av成人| 久久久久久久免费视频| 一本高清在线| 国产成人女人在线视频观看 | 色综合久久久久综合体桃花网| 九九久久99| 欧美日本二区| 国产不卡精品一区二区三区| 国产韩国精品一区二区三区| 国产一级生活片| 99久久精品国产高清一区二区| 亚洲第一页色| 日韩av东京社区男人的天堂| 韩国毛片免费| 欧美激情一区二区三区视频| 青青久久网| 超级乱淫黄漫画免费| 成人免费观看的视频黄页| 国产一区二区精品| 99色视频| a级精品九九九大片免费看| 天天做日日爱夜夜爽| 国产一区二区精品久久91| 99久久精品国产麻豆| 91麻豆精品国产高清在线| 国产精品123| 青青久久国产成人免费网站| 国产原创中文字幕| 一级女性全黄生活片免费| 一级女人毛片人一女人| 九九精品影院| 91麻豆精品国产自产在线| 精品国产一区二区三区免费 | 国产福利免费观看| 国产不卡高清在线观看视频| 精品视频免费看| 日本特黄一级| 免费一级片在线| 一级毛片视频播放| 成人高清视频免费观看| 国产伦精品一区三区视频| 久久国产影视免费精品| 日韩av片免费播放| 国产一区二区精品尤物| 99热精品在线| 国产成a人片在线观看视频| 91麻豆tv| 黄视频网站在线免费观看| 欧美一级视频免费观看| 国产精品1024永久免费视频| 国产韩国精品一区二区三区| 国产成人精品综合| 午夜在线亚洲| 国产一区二区福利久久| 亚洲天堂在线播放| 国产一区二区精品久久91| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人影院久久久久久影院| 久久精品免视看国产明星| 天天做日日爱| 国产亚洲精品aaa大片| 免费毛片播放| 美女免费黄网站| 日韩中文字幕在线亚洲一区 | 韩国三级香港三级日本三级la| 国产视频久久久久| 久草免费在线色站| 免费的黄视频| 九九九国产| 你懂的日韩| 日韩一级黄色片| 美女免费黄网站| 午夜欧美成人香蕉剧场| 国产不卡福利| 国产国语对白一级毛片| 亚洲 欧美 91| 九九精品影院| 欧美大片a一级毛片视频| 欧美一级视频免费| 国产麻豆精品高清在线播放| 国产麻豆精品| 999久久66久6只有精品| 国产综合成人观看在线| 免费国产在线观看不卡| 久久精品成人一区二区三区| 999久久66久6只有精品| 在线观看成人网 | 成人影视在线观看| 一本伊大人香蕉高清在线观看| 国产a视频| 精品久久久久久免费影院| 国产精品自拍一区| 欧美大片aaaa一级毛片| 色综合久久久久综合体桃花网| 九九久久国产精品大片| 台湾毛片| 麻豆午夜视频| 成人免费一级毛片在线播放视频| 免费国产在线观看| 国产福利免费观看| 国产一级生活片| 日本在线不卡视频| 二级片在线观看| 日韩欧美一二三区| 亚洲天堂在线播放| 亚欧视频在线| 亚欧视频在线| 成人免费观看的视频黄页| 国产成人精品综合在线| 欧美激情一区二区三区在线| 精品视频一区二区| 精品国产一区二区三区精东影业 | 国产精品免费久久| 99色视频| 尤物视频网站在线| a级毛片免费观看网站| 国产精品自拍一区| 黄色免费三级| 午夜家庭影院| 国产麻豆精品| 欧美激情影院| 久草免费在线观看| 日韩中文字幕一区二区不卡| 国产福利免费观看| 你懂的福利视频| 久久福利影视| 可以免费看污视频的网站| 国产视频一区二区在线观看|