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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

【HTML】Canvas(3)-绘制图片

發(fā)布時(shí)間:2024/1/8 HTML 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HTML】Canvas(3)-绘制图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開發(fā)游戲的時(shí)候,游戲中的地圖、背景、任務(wù)、物品等都是由圖片組成的,這次我們來談?wù)勗赾anvas中如何操作圖片吧。

?????? canvas中提供了drawImage函數(shù)putImageData函數(shù)來繪制圖片。

?????? drawImage()函數(shù)有3種函數(shù)原型,語(yǔ)法如下:

?????? drawImage(image,dx,dy);

?????? drawImage(image,dx,dy,dw,dh);

?????? drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);

?????? 參數(shù)一image是要繪制的對(duì)象,這個(gè)參數(shù)可以是HTMLImageELement、HTMLCanvasElement、HTMLVideoElement,

?????? dx,dy是image在canvas中定位的坐標(biāo)值,

?????? dw,dh表示image在canvas中即將繪制的區(qū)域(相對(duì)dx和dy坐標(biāo)的偏移量)的寬度和高度值,

?????? sx,sy是image所要繪制的起始位置,

?????? sw,sh是image所要繪制的區(qū)域(相對(duì)image的sx和sy坐標(biāo)的偏移量)的寬度和高度值

??????

?????? 先準(zhǔn)備好HTML部分:

<body>img標(biāo)簽<br/><img src="../images/travel.jpg" id="travel" alt="travel" title="travel"/><br/><br/><br/>canvas畫板<br/><!-- PS:畫板要設(shè)定寬高值,且要不能小于原圖,否則圖片會(huì)顯示不完整 --><canvas id="mycanvas" width="500" height="500"> 你的瀏覽器不支持HTML5</canvas> </body>

Javascript部分:

?????? 方法一:通過<img>標(biāo)簽來獲取

var c=document.getElementById('mycanvas');var ctx=c.getContext('2d');//獲取圖片id,取得圖片數(shù)據(jù)var img=document.getElementById('travel');//用drawImage()函數(shù)將圖片繪制到畫板上ctx.drawImage(img,0,0); 方法二:通過javascript的Image對(duì)象來獲取


先創(chuàng)建一個(gè)Image對(duì)象,然后通過設(shè)置src屬性來載入圖片,接著添加onload事件偵聽,當(dāng)圖片載入完成時(shí)將其繪制到畫板上。

var c=document.getElementById('mycanvas');var ctx=c.getContext('2d');var img=new Image();img.src='../images/travel.jpg';img.οnlοad=function(){ctx.drawImage(img,0,0);};
我們來具體看下 drawImage函數(shù)的3種函數(shù)原型的用法和區(qū)別:


var c=document.getElementById('mycanvas');var ctx=c.getContext('2d');var image=new Image();image.src='../images/travel.jpg';image.οnlοad=function(){//表示從坐標(biāo)(0,0)開始繪制整張圖片ctx.drawImage(image,0,0);//表示從坐標(biāo)(200,0)開始繪制整張圖片到長(zhǎng)100,寬100的矩形區(qū)域內(nèi)ctx.drawImage(image,200,0,100,100);//表示截取圖片從(50,50)到(100,80)的部分,從坐標(biāo)(200,110)開始繪制放到長(zhǎng)100,寬60的矩形區(qū)域內(nèi)ctx.drawImage(image,50,50,100,80,200,110,100,60);};

還有一種繪制圖片的方法,就是利用getImageData和putImageData繪制圖片:

?????? putImageData(imgdata,dx,dy,sx,sy,sw,sh)函數(shù)的7個(gè)參數(shù)中,imgdata是像素?cái)?shù)據(jù),dx,dy是繪制圖片的定位坐標(biāo)值,sx,sy是imgdata所要繪制圖片的其實(shí)位置,sw,sh是imgdata所要繪制區(qū)域(相對(duì)imgdata的sx,sy坐標(biāo)的偏移量)的寬度和高度值。后4個(gè)參數(shù)可以省略,此時(shí)表示繪制整個(gè)imgdata

?????? 在使用putImageData()前,需先用getImageData(x,y,w,h)函數(shù)得到像素?cái)?shù)據(jù),即從canvas畫板上取得所選區(qū)域的像素?cái)?shù)據(jù),它的4個(gè)參數(shù)分別是:選擇區(qū)域七點(diǎn)的坐標(biāo)x和坐標(biāo)y,選擇區(qū)域的長(zhǎng)和寬。

?????? putImageData(imagedata,dx,dy,x,y,w,h)函數(shù)則表示將所得到的像素?cái)?shù)據(jù)描畫到canvas畫板上形成圖形。

var c=document.getElementById('mycanvas');var ctx=c.getContext('2d');var image=new Image();image.src='../images/travel.jpg';image.οnlοad=function(){ctx.drawImage(image,0,0);var imgData=ctx.getImageData(50,50,192,168);ctx.putImageData(imgData,200,260);ctx.putImageData(imgData,200,260,50,50,100,100);}; 注:使用getImageData函數(shù)獲取圖片數(shù)據(jù),此函數(shù)在chrome,Firefox,ie等瀏覽器中會(huì)涉及跨域問題,所以無法直接在瀏覽器中瀏覽,必須通過服務(wù)器來訪問測(cè)試。


Author:致知

Sign:路漫漫其修遠(yuǎn)兮,吾將上下而求索。


附:

【HTML】Canvas(1)-繪制圖形

【HTML】Canvas(2)-繪制文本

【HTML】Canvas(4)-進(jìn)階

總結(jié)

以上是生活随笔為你收集整理的【HTML】Canvas(3)-绘制图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。