日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 图片 放大镜,详解html5实现图像局部放大镜(可调节)(图文)

發布時間:2024/3/26 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 图片 放大镜,详解html5实现图像局部放大镜(可调节)(图文) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面繼續介紹基于html5畫布canvas的放大鏡效果:

主要步驟:

1)圖像的加載,上篇blog里有www.php.cn/html5-tutorial-358646.html,必須注意apache的配置,否則getImageData()會有安全問題而無法運行!!

2)核心:兩個圖像矩陣間的映射,

設o為圓心,則變換后的點A‘對應的是原圖像的A點(此乃放大的效果!!!本實驗取放大倍數為2)

3)為了簡便起見,沒有采用線性插值的方法,直接取整獲得A點的坐標。for (var j=0;j

for(var i=0;i

var k=4*(image.width*j+i);

var k1=4*(image.width*Math.floor((j+y0)/2)+Math.floor((i+x0)/2));

...

else if(isIn(x0,y0,i,j,r)){//isIn()判定點是否在園內

if(k1>=0&&k1<=4*image.height*image.width){

imagedata2.data[k+0]=imagedata1.data[k1+0];

imagedata2.data[k+1]=imagedata1.data[k1+1];

imagedata2.data[k+2]=imagedata1.data[k1+2];

imagedata2.data[k+3]=255;

// console.log('x:'+x+'y:'+y);

}

4)為使鏡子凸顯,設定邊緣處點為一黑點(即rgb均為0)function isOn(x0,y0,x,y,r){//放大鏡邊緣

if((x0-x)*(x0-x)+(y0-y)*(y0-y)==r*r)

return true;

else

return false;

}if (isOn(x0,y0,i,j,r)){

imagedata2.data[k+0]=0;

imagedata2.data[k+1]=0;

imagedata2.data[k+2]=0;

imagedata2.data[k+3]=255;

}

5)越界或者換行的點(若存在),忽略之(取原值即可)else{

imagedata2.data[k+0]=imagedata1.data[k+0];

imagedata2.data[k+1]=imagedata1.data[k+1];

imagedata2.data[k+2]=imagedata1.data[k+2];

imagedata2.data[k+3]=255;

}

6)放大鏡半徑的外界設定

同樣利用canvas以及onclick函數,如下所示:

&nbsp放大鏡半徑為

var canvas2=document.getElementById('bar');

var context2=canvas2.getContext('2d');

context2.beginPath();

context2.lineWidth = 1;//邊框寬度

context2.strokeStyle = "#ff00ff";//邊框顏色

context2.strokeRect(10,0,295,28);//邊框坐標及大小

context2.closePath();

canvas2.οnclick=function(e){

var x1=e.clientX-e.target.offsetLeft;

context2.clearRect(0,0,305,30);//擦除上次的痕跡

context2.beginPath();

context2.lineWidth = 1;//邊框寬度

context2.strokeStyle = "#ff00ff";//邊框顏色

context2.strokeRect(10,0,295,28);//邊框坐標及大小

context2.fillStyle = "#00ff00";//填充canvas的背景顏色

context2.fillRect(0, 0, x1,28);//參數分別表示 x軸,y軸,寬度,高度

document.getElementById('r').innerHTML=Math.floor(x1/6);

r=Math.floor(x1/6);

}

下面是完整代碼:

canvas圖像處理

canvas放大鏡

是時候更換瀏覽器了點擊下載firefox

var canvas1=document.getElementById('canvas1');

var context1=canvas1.getContext('2d');

image=new Image();

image.src="photo.jpg";

context1.drawImage(image,0,0);//繪制原始圖像,(0,0)表示圖像的左上角位與canvas畫布的位置

var imagedata1=context1.getImageData(0,0,image.width,image.height);

var imagedata2=context1.createImageData(image.width,image.height);

r=40;//放大鏡半徑,原始默認值,可以通過最下面的進度條設置

canvas1.οnmοusemοve=function(e){

var x=e.clientX-e.target.offsetLeft;

var y=e.clientY-e.target.offsetTop;

x0=x;y0=y;

//console.log('x:'+x+'y:'+y);

for (var j=0;j

for(var i=0;i

var k=4*(image.width*j+i);

var k1=4*(image.width*Math.floor((j+y0)/2)+Math.floor((i+x0)/2));//對應的原始圖像上的點

if (isOn(x0,y0,i,j,r)){//放大鏡邊緣上的點

imagedata2.data[k+0]=0;

imagedata2.data[k+1]=0;

imagedata2.data[k+2]=0;

imagedata2.data[k+3]=255;

}

else if(isIn(x0,y0,i,j,r)){//放大區域的點

if(k1>=0&&k1<=4*image.height*image.width){//放大效果的的時候,這一步其實可以省略

imagedata2.data[k+0]=imagedata1.data[k1+0];

imagedata2.data[k+1]=imagedata1.data[k1+1];

imagedata2.data[k+2]=imagedata1.data[k1+2];

imagedata2.data[k+3]=255;

// console.log('x:'+x+'y:'+y);

}

}

else{//其他剩下不受影響的點

imagedata2.data[k+0]=imagedata1.data[k+0];

imagedata2.data[k+1]=imagedata1.data[k+1];

imagedata2.data[k+2]=imagedata1.data[k+2];

imagedata2.data[k+3]=255;

}

}}

context1.putImageData(imagedata2,0,0);//canvas顯示

}

canvas1.οnmοuseοut=function(){context1.drawImage(image,0,0);}//鼠標移出,自動重繪

function isIn(x0,y0,x,y,r){//放大區域

if((x0-x)*(x0-x)+(y0-y)*(y0-y)

return true;

else

return false;

}

function isOn(x0,y0,x,y,r){//放大鏡邊緣

if((x0-x)*(x0-x)+(y0-y)*(y0-y)==r*r)

return true;

else

return false;

}

&nbsp放大鏡半徑為

var canvas2=document.getElementById('bar');

var context2=canvas2.getContext('2d');

context2.beginPath();

context2.lineWidth = 1;//邊框寬度

context2.strokeStyle = "#ff00ff";//邊框顏色

context2.strokeRect(10,0,295,28);//邊框坐標及大小

context2.closePath();

canvas2.οnclick=function(e){

var x1=e.clientX-e.target.offsetLeft;

context2.clearRect(0,0,305,30);

context2.beginPath();

context2.lineWidth = 1;//邊框寬度

context2.strokeStyle = "#ff00ff";//邊框顏色

context2.strokeRect(10,0,295,28);//邊框坐標及大小

context2.fillStyle = "#00ff00";//填充canvas的背景顏色

context2.fillRect(0, 0, x1,28);//參數分別表示 x軸,y軸,寬度,高度

document.getElementById('r').innerHTML=Math.floor(x1/6);

r=Math.floor(x1/6);//一個劃算,使得最大半徑為50px

}

Attention:

1)記得將canvas1的寬高設置和圖片大小相同,如不同,還要在進行以此計算,比較麻煩;

效果如下:

總結

以上是生活随笔為你收集整理的php 图片 放大镜,详解html5实现图像局部放大镜(可调节)(图文)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 手机亚洲第一页 | 在线黄色av | 先锋资源在线视频 | 色窝窝综合色窝窝久久 | 99久久精品国产一区色 | 日韩夫妻性生活 | 北条麻妃一区二区三区四区五区 | 天堂在线官网 | 欧美一级免费 | 在线免费观看视频黄 | 奇米久久久 | 欧美乱码精品一区二区三区 | 91亚洲视频 | 97超碰人人 | 精品1区2区3区 | 超碰在线cao | 天天射天天 | 日韩在线中文字幕视频 | 欧美成人免费看 | 国产老女人乱淫免费可以 | 欧美激情亚洲激情 | 色哟哟无码精品一区二区三区 | 日韩性xxxx | 波多野吉衣一区二区三区 | 国产a精品| 亚洲三级在线免费观看 | 一本色道久久综合亚洲精品图片 | 国产黄色片在线 | 人人看超碰| 99精品国产免费 | 性欧美精品| 五月丁香综合激情六月久久 | 18深夜在线观看免费视频 | 女同亚洲精品一区二区三 | 成人极品 | 可乐操亚洲 | 日本乱码一区二区 | 成人亚洲天堂 | 欧美日韩激情在线 | 国产视频污在线观看 | 屁屁影院国产第一页 | 国产又粗又猛又黄又爽 | 亚洲性猛交xxxx乱大交 | 污视频免费在线观看网站 | 国产免费啪啪 | 91成人短视频在线观看 | 中文字幕欧美激情 | 特黄老太婆aa毛毛片 | 九九热在线精品视频 | 中文字字幕在线中文乱码电影 | 在线观看黄色av网站 | 污片在线免费看 | 99这里只有精品视频 | 国产小视频在线看 | 鲁鲁狠狠狠7777一区二区 | 久久大片 | 久久精品天天中文字幕人妻 | 国产九九在线 | 九色麻豆 | 午夜av网| 毛片久久久久久久 | 欧美一区二区三区激情啪啪 | 少妇无码av无码专区在线观看 | 91久久精品一区二区别 | 樱花草av| 日韩免费不卡视频 | 91视频二区 | 亚洲精品小视频 | 欧美福利一区二区 | 海角社区id| 免费看av软件 | 夜夜成人 | 国产三级在线看 | 久久草国产 | 黑人巨大精品欧美一区免费视频 | 123毛片| www.av欧美 | 美国av导航| 久久99久久99精品免观看粉嫩 | 久久人人草 | 清纯唯美亚洲综合 | 熟妇大屁股一区二区三区视频 | 乱一色一乱一性一视频 | 欧美福利视频一区二区 | av综合在线观看 | av成人毛片| 成人黄色在线免费观看 | 99热这里只有精品7 青青草社区 | 黄色美女视频网站 | 天天躁日日躁狠狠躁av麻豆男男 | 久久高清免费 | 91视频网址 | 黄色av免费 | 亚洲网站在线 | 日日干日日摸 | www.国产在线观看 | a√天堂资源 | 国产精品日韩av | 中文字幕免费在线视频 |