欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Canvas實現放大鏡效果完整案例分析(附代碼)

Canvas實現放大鏡效果完整案例分析(附代碼)

熱門標簽:機器人外呼系統存在哪些能力 南昌仁和怎么申請開通400電話 電話機器人電銷系統掙話費 高德地圖標注地點糾錯 拓展地圖標注 如何獲取地圖標注客戶 只辦理400電話 平涼地圖標注位置怎么弄 電話機器人黑斑馬免費

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

一張模糊的圖片:

鼠標點擊任意位置,產生放大效果:

哇塞~ 一個帥哥,哈哈哈哈~

1、放大鏡原理

實現效果:如上圖,點擊或點擊滑動鼠標顯示一個區域,區域中顯示對應點擊部分范圍的放大清晰圖片。那么問題就可以肢解為3部分:

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

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

3、如何在鼠標點擊滑動的時候顯示該區域;

 

2、顯示模糊照片

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

首先定義一個 canvas 元素

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

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

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

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

3、加載清晰圖片

我們再加一個canvas(放大鏡看到的圖片),初始隱藏:

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

// 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 繪制放大鏡

鼠標所處的位置點(x,y)是區域的中心,計算出清晰圖所在的位置點,截取圓形

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

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

// 釋放當前狀態
ctx1.restore();

繪制狀態的最佳搭檔save()和restore():用于對當前狀態的保存及釋放不影響其他操作;可用于重復的繪制圖形的變化過程;

clip():表示剪切區域

4.2 離屏技術

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

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

// 對應模糊圖的左上角起點
var dx = x - mr,
    dy = y - mr;

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

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

5、鼠標交互事件

效果:鼠標點擊并滑動鼠標產生反應,松開鼠標或者移除畫布則失效。

//定義一個判斷鼠標是否是點擊滑動的標識符
var flag;

//鼠標點入事件
canvas.onmousedown = function(e) {
  flag = true;
  //顯示放大鏡
}
// 鼠標移動事件
canvas.onmousemove = function(e) {
  if (flag) {
    //顯示放大鏡
  }
}
//鼠標松開事件
canvas.onmouseup = function(e) {
  flag = false;
  // 隱藏放大鏡
}
//鼠標離開事件
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();
  },

  //移動
  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();
}

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

標簽:池州 永州 棗莊 漯河 新疆 青島 遼源 西藏

巨人網絡通訊聲明:本文標題《Canvas實現放大鏡效果完整案例分析(附代碼)》,本文關鍵詞  Canvas,實現,放大鏡,效果,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Canvas實現放大鏡效果完整案例分析(附代碼)》相關的同類信息!
  • 本頁收集關于Canvas實現放大鏡效果完整案例分析(附代碼)的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    成人精品在线视频观看| 欧美日韩久久不卡| 久久综合九色综合97婷婷女人| 亚洲国产日韩一级| 91农村精品一区二区在线| 69xx绿帽三人行| 国产精品乱子久久久久| 成人自拍视频在线观看| 老司机深夜福利网站| 久久久久国产精品厨房| 国模大尺度一区二区三区| 国产sm调教视频| www激情久久| 加勒比av一区二区| 东方伊人免费在线观看| 久久久国产精品麻豆| 精品亚洲免费视频| 日本二区在线观看| 久久精品夜夜夜夜久久| 国产精品一区一区| 欧美日韩中文字幕视频| 国产亚洲精久久久久久| 国产成人午夜精品影院观看视频| 欧美肥妇bbwbbw| 国产精品久久久久久久浪潮网站| 成人av影院在线| 欧美在线一区二区| 亚洲一区影音先锋| 国产熟女高潮一区二区三区| 欧美大胆人体bbbb| 国模套图日韩精品一区二区| www深夜成人a√在线| 亚洲色大成网站www久久九九| xxxxwww一片| 日韩一区二区免费电影| 看片网站欧美日韩| 欧美日韩黄色网| 樱花影视一区二区| 成人手机在线免费视频| 精品精品欲导航| 国产乱码精品一区二区三区忘忧草| 日韩在线中文字幕视频| 一区二区三区成人| 色无极影院亚洲| 国产精品午夜久久| 台湾佬美性中文| 日韩精品一区二区三区视频播放 | 青青青伊人色综合久久| 蜜桃久久精品成人无码av| 国产精品久久久久一区二区三区共| 99精品国产视频| 日韩一级黄色大片| 国产成人综合视频| 精品1区2区3区| 蜜臀av国产精品久久久久| 永久免费看片直接| 亚洲一区二区偷拍精品| 91视频免费观看网站| 亚洲欧美中日韩| 荫蒂被男人添免费视频| 国产欧美日韩久久| www日本在线观看| 精品粉嫩超白一线天av| 99久久久久免费精品国产| 日韩欧美在线影院| 成人一区在线看| 欧美一区二区免费观在线| 国产经典欧美精品| 欧美巨大另类极品videosbest | 免费一级suv好看的国产网站| 亚洲欧美偷拍卡通变态| 我和岳m愉情xxxⅹ视频| 一区二区中文视频| 少妇按摩一区二区三区| 亚洲同性同志一二三专区| 亚洲精品在线视频免费观看| 国产精品国产三级国产aⅴ入口 | 国产人妻精品午夜福利免费| 久久免费看少妇高潮| 中文字幕亚洲日本| 国产午夜精品久久久久久久| 69亚洲乱人伦| 国产精品美女视频| 国精产品一区一区三区免费视频 | 欧美综合色免费| 韩国欧美国产1区| 欧美伦理电影网| 成人免费黄色在线| 精品国产百合女同互慰| 日本55丰满熟妇厨房伦| 欧美国产日韩亚洲一区| 韩国无码一区二区三区精品| 亚洲欧美激情视频在线观看一区二区三区 | 色婷婷精品大视频在线蜜桃视频| 久久精品99国产精品日本| 精品1区2区3区| www.66久久| 国产校园另类小说区| 给我免费观看片在线电影的| 亚洲欧美另类图片小说| 伊人久久久久久久久久久久久久| 日韩不卡免费视频| 欧美日韩一区二区三区四区| 成人免费的视频| 久久精品亚洲一区二区三区浴池 | 日本视频在线一区| 欧美三级中文字| 99久久777色| 国产精品久久久久永久免费观看| 久久久视频6r| 日韩vs国产vs欧美| 欧美一区二区三区在线电影| 人妻精品久久久久中文字幕69| 国产精品女人毛片| 日本伦理一区二区三区| 国内精品伊人久久久久av影院 | 男人操女人下面视频| 中文字幕亚洲一区二区av在线| 正在播放国产对白害羞| 久久国产成人午夜av影院| 欧美一级艳片视频免费观看| 美国黄色一级视频| 亚洲综合一区二区精品导航| 色噜噜狠狠成人中文综合| 成人深夜在线观看| 国产精品久久久久影院亚瑟| 日本福利片在线观看| 国产成人在线色| 国产情人综合久久777777| 免费成人深夜天涯网站| 激情欧美一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 日本猛少妇色xxxxx免费网站| 久久精品国产免费看久久精品| 精品剧情在线观看| 日韩一区二区a片免费观看| 麻豆国产精品777777在线| 精品久久久久一区| 人人妻人人澡人人爽| 国内成人免费视频| 中文字幕欧美激情| 韩国成人精品a∨在线观看| 精品国产免费人成电影在线观看四季 | 欧美日韩黄色网| av中文字幕亚洲| 亚洲精品欧美激情| 欧美日韩国产高清一区| 中文字幕天堂网| 免费在线观看视频一区| 精品国产免费一区二区三区四区 | 国产高清精品网站| 国产精品卡一卡二卡三| 色婷婷综合久久久久中文 | 国产精品久久夜| 色综合咪咪久久| 美女被艹视频网站| 五月天激情综合网| 精品理论电影在线| 国产又黄又粗又猛又爽的| 成人黄页在线观看| 夜夜嗨av一区二区三区| 欧美一区二区三区四区在线观看| xxxx日本免费| 懂色av中文一区二区三区| 亚洲免费观看高清完整版在线观看熊| 欧美三级午夜理伦三级中视频| 日韩aaaaa| 国产一区二区三区四| 1024国产精品| 在线不卡欧美精品一区二区三区| 国产精品亚洲无码| 高清国产一区二区| 亚洲国产日产av| 久久亚洲精品国产精品紫薇| 91视频综合网| 中国免费黄色片| 国精产品一区一区三区mba视频| 国产精品久久久久天堂| 欧美男同性恋视频网站| 国产伦精品一区二区三区视频女| 成人av免费网站| 日韩电影一区二区三区| 中文字幕精品在线不卡| 欧美日韩国产一级二级| 久久久久久久毛片| 无码人妻一区二区三区在线视频| 人人超碰91尤物精品国产| 欧美激情一区二区三区不卡| 欧美日韩一区在线| 一级特黄曰皮片视频| 99热这里只有精品2| 国内精品国产成人国产三级粉色 | ㊣最新国产の精品bt伙计久久| 欧美一区二区网站| 91免费公开视频| 人妻熟女aⅴ一区二区三区汇编| 不卡区在线中文字幕| 久久国产精品无码网站| 一区二区三区在线观看国产| 久久婷婷国产综合精品青草|