posts - 48,comments - 156,trackbacks - 0
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          積分與排名

          • 積分 - 157322
          • 排名 - 386

          最新評論

          閱讀排行榜

          評論排行榜

          一、創建圖像對象

          在 HTML5 中,Image 對象對應著一幅圖片,想要獲取一個圖像對象,有以下幾種方法:

          1) 通過 document.images 集合、document.getElementsByTagName 方法或者 document.getElementById 方法來獲取網頁內已經存在的圖片對象

          2) 用 document.getElementsByTagNamedocument.getElementById 方法來獲取另外一個 Canvas 對象,將這個 Canvas 對象作為一個圖像對象;

          3) 最常用的方法:創建一個新的空 Image 對象,給他一個圖片的超鏈接,代碼如下:

          //創建一個空圖像對象
          var img = new Image();
          //給圖像對象一個圖片超鏈接
          img.src = 'myImage.png'

          4) 最后一種是通過 data: url 方式嵌入圖像,這種方法很奇妙,他可以用一個很長的字符串來表示一幅圖像。

          那么這個很長的字符串是怎么來的呢?他是把真正的圖像文件(bmp jpg 等等)通過 Base64 編碼而來,具體的編碼程序網上能搜索到很多,我博客里就有一個 Python 版的。

          用這種方式的好處就是,圖片資源始終內嵌在 HTML 網頁文件中,缺點是數據量太大,而且圖片沒辦法緩存,導致網頁文件打開速度變慢 

          下面的字符串就是一幅美女圖片的 Base64 編碼的一小段,讓大家看看是什么樣子的:

          /9j/4QDfRXhpZgAASUkqAAgAAAAFABIBAwABAAAAAQAAADEBAgAVAAAASgAAADIBAgAUAAAAXw

          這些亂七八糟的東西就包含了美女圖片的一小部分內容了,后面我們將把它繪制到 Canvas 上

           

          二、繪制圖像對象

          我們得到一個圖像對象后,它只是在內存中,我們怎么才能將它繪制到畫布上呢? 上下文對象有一個繪制圖像對象的方法:

          drawImage(image, x, y)

          簡單吧?image 就是你事先準備好的圖像對象,x, y 就是圖像左上角放置的位置 ,這個方法調用后,你的圖像就會出現在 Canvas 上了

          下面我們來把上面的美女圖像繪制出來,代碼如下:

          代碼
          <canvas id="canvas1" width="250" height="300" style="background-color:black">
              你的瀏覽器不支持 
          &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器
          </canvas><br/>
          <input type="button" value="顯示美女" onclick="Show();" />
          <input type="button" value="清空" onclick="Clear();" />

          <script type="text/javascript">
              //美女圖的 Base64 編碼
              IMG_SRC='data:image/gif;base64,/9j/4QDfRXhpZgAASUkqAAgAAAA......'//省略40字節
              //縮小版本的美女圖
              IMG_SRC_SMALL='data:image/gif;base64,/9j/4QDfRXhpZgAASUkqAAgAAAA......'//省略40字節

              
          function Show(){
                  
          //獲取畫布對象
                  ctx = document.getElementById("canvas1").getContext("2d");
                  //創建圖像對象
                  img
          =new Image();
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      ctx.drawImage(img,
          0,0
          );
                  }
                  //指定圖像源
                  img.src=IMG_SRC;   
              }  

              
          function Clear(){
                  
          //清除畫布
                  ctx = document.getElementById("canvas1").getContext("2d");
                  ctx.clearRect(
          0,0,250,300);
              }  
          </script>

          注意把繪制方法放到圖像對象的 onload 事件中,是為了確保圖像在完全裝入后才繪制

          你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

           

          三、縮放圖像

          同樣的 imageDraw 方法,增加兩個參數,就可以對圖像實現縮放,如下:

          drawImage(image, x, y, width, height)

          width 代表你想將圖像繪制成多寬,height 代表你想將圖像繪制成多高,設定好后系統會自動按比例進行縮放。

          下面的例子我們來模仿一個常見的圖像軟件的小功能,通過拖動滑動條對圖像進行縮放,代碼如下:

          代碼
          <canvas id="canvas2" width="250" height="300" style="background-color:black">
              你的瀏覽器不支持 
          &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器
          </canvas><br/>
          注意:下面的 Range 控件只能在 Google Chrome 瀏覽器中正確呈現
          橫向縮放
          <input type="range" min="1" max="20" onchange="Scale1(event)"/><br/>
          縱向縮放
          <input type="range" min="1" max="20" onchange="Scale2(event)"/><br/>
          按比例縮放
          <input type="range" min="1" max="20" onchange="Scale3(event)"/><br/>
          平鋪
          <input type="range" min="1" max="10" value="1" onchange="Scale4(event)"/><br/>

          <script type="text/javascript">    
              function Scale1(){
                  
          //計算比例
                  var scale=event.target.value/10
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas2").getContext("2d");
                  
          //清空
                  ctx.clearRect(0,0,250,300);
                  
          //創建圖像對象
                  img=new Image();
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      
          //橫向縮放繪制
                      ctx.drawImage(img,0,0,img.width*scale,img.height);
                  }
                  
          //指定圖像源
                  img.src=IMG_SRC;
              } 
                  
              function Scale2(){
                  
          //計算比例
                  var scale=event.target.value/10
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas2").getContext("2d");
                  
          //清空
                  ctx.clearRect(0,0,250,300);
                  
          //創建圖像對象
                  img=new Image();
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      
          //縱向縮放繪制
                      ctx.drawImage(img,0,0,img.width,img.height*scale);
                  }
                  
          //指定圖像源
                  img.src=IMG_SRC;
              }
              
              function Scale3(){
                  
          //計算比例
                  var scale=event.target.value/10
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas2").getContext("2d");
                  
          //清空
                  ctx.clearRect(0,0,250,300);
                  
          //創建圖像對象
                  img=new Image();
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      
          //按比例縮放繪制
                      ctx.drawImage(img,0,0,img.width*scale,img.height*scale);
                  }
                  
          //指定圖像源
                  img.src=IMG_SRC;
              }
              
              function Scale4(){
                  
          //平鋪比例
                  var scale=event.target.value;
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas2").getContext("2d");
                  
          //清空
                  ctx.clearRect(0,0,250,300);
                  
          //創建圖像對象
                  img=new Image();
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      
          //平鋪個數
                      var n1=img.width/scale;
                      var n2
          =img.height/scale;
                      
                      
          for(var i=0;i<n1;i++)
                          
          for(var j=0;j<n2;j++)
                              ctx.drawImage(img,i
          *img.width/scale,j*img.height/scale,img.width/scale,img.height/scale);
                  }
                  
          //指定圖像源
                  img.src=IMG_SRC;
              }
          </script>

          你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

          注意下面的 Range 控件只能在 Google Chrome 瀏覽器中正確呈現 
          橫向縮放
          縱向縮放
          按比例縮放
          平鋪

          提示:

          只有在 Google Chrome 瀏覽器中,Range 控件才能呈現出滑動條的的樣子并正確工作;

          在其他瀏覽器中,您可能只能看到四個文本框,并且無法正常工作

           

          四、裁剪圖像

          圖像裁剪同樣是使用 imageDraw 方法,原型如下:

          drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight),其中

          sx, sy 是圖像上的一個坐標位置,這個坐標是裁剪的起始點

          sWidth, sHeight 是裁剪的寬度和長度

          有了這四個參數,我們就可以將圖像上的任意區域裁剪出來了

          另外

          dx, dy 是畫布上的一個坐標為止,裁剪出來的圖像的左上角將放置在這個位置

          dWidth, dHeight 是設置裁剪出來的圖像繪制成多長和多寬,可以縮放

          裁剪圖像比較簡單,就不給例子了

           

          五、圖案

          在上面的圖像縮放中,我們用循環的方法實現了圖像的平鋪,其實還有更方便的方法,就是用圖案對象填充畫布,圖案對象用下面的方法創建:

          createPattern(image,type)

          其中,Type 必須是下面的字符串值之一:repeat,repeat-x,repeat-y 和 no-repeat。

          得到圖案對象后,可以將其設置給上下文對象的 fillStyle 屬性,然后再填充畫布,就可以看到重復填充的效果了。

          下面的代碼中,我們將把縮小版本的美女圖用 repeat 模式,平鋪到畫布上:

          圖案
          <canvas id="canvas3" width="250" height="300" style="background-color:black">
              你的瀏覽器不支持 
          &lt;canvas&gt;標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器
          </canvas><br/>
          <input type="button" value="貼圖" onclick="Patterns();" />
          <input type="button" value="清空" onclick="ClearPatterns();" />

          <script type="text/javascript">
              
          //美女圖的縮小版本
              IMG_SRC_SMALL='data:image/gif;base64,/9j/4QDfRXhpZgAASUkqAAgAAAAFABIBA......';//省略四個字節

              function Patterns(){
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas3").getContext("2d");
                  
          //創建圖像對象
                  img=new Image();
                  
          //指定圖像源
                  img.src=IMG_SRC_SMALL;
                  
          //圖像被裝入后觸發
                  img.onload=function(){
                      
          //創建圖案
                      var ptrn = ctx.createPattern(img,'repeat'); 
                                  
          //將圖案設置為填充樣式
                      ctx.fillStyle = ptrn;  
                                  
          //填充畫布
                      ctx.fillRect(0,0,250,300);  
                  }
              }
              
              function ClearPatterns(){
                  
          ///獲取畫布對象
                  ctx = document.getElementById("canvas3").getContext("2d");
                  
          //清空
                  ctx.clearRect(0,0,250,300);
              }
          </script>

          你的瀏覽器不支持 <canvas>標簽,請使用 Chrome 瀏覽器 或者 FireFox 瀏覽器

           

          六、字體

          HTML5 的沒有專門的字體對象,上下文對象中有三個屬性用來設置字體,兩個方法來繪制字符串,他們是:

          font:文字字體,同 CSS font-family 屬性
          textAlign:文字水平對齊方式。可取屬性值: start, end, left, right, center。默認值: start.
          textBaseline:文字豎直對齊方式。可取屬性值:top, hanging, middle, alphabetic, ideographic, bottom。默認值:alphabetic.

          fillTextstrokeText:用填充方式和輪廓方式繪制字符串

          下面的代碼繪制兩個不同設置的 Hello World 字符串

          代碼
          context.fillStyle    = '#00f';
          context.font         
          = 'italic 30px sans-serif';
          context.textBaseline 
          = 'top';
          //填充字符串
          context.fillText  (
          'Hello world!'00);
          context.font         
          = 'bold 30px sans-serif';
          //輪廓字符串
          context.strokeText(
          'Hello world!'050);

          下圖是上面的代碼運行效果:





          //==========================================

          posted on 2010-10-04 16:45 左洸 閱讀(2893) 評論(0)  編輯  收藏 所屬分類: HTML5
          主站蜘蛛池模板: 永川市| 六安市| 岫岩| 宜章县| 思南县| 玉山县| 中西区| 罗江县| 开原市| 莒南县| 贡觉县| 淳化县| 寿宁县| 三明市| 云阳县| 广元市| 达州市| 梁河县| 古浪县| 荃湾区| 博湖县| 蓝田县| 思南县| 信丰县| 南陵县| 墨玉县| 海原县| 偃师市| 甘肃省| 饶平县| 云和县| 永仁县| 高唐县| 两当县| 固镇县| 郎溪县| 丹寨县| 永仁县| 台南县| 依安县| 乐安县|