<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 48,comments - 156,trackbacks - 0
    一、創建圖像對象

    在 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 左洸 閱讀(2889) 評論(0)  編輯  收藏 所屬分類: HTML5
    主站蜘蛛池模板: 成人毛片18岁女人毛片免费看| 波多野结衣一区二区免费视频| 亚洲无吗在线视频| 国产一区二区三区无码免费| 中文字幕在线免费视频| 亚洲成人网在线播放| 免费a级毛片无码a∨性按摩| 十八禁视频在线观看免费无码无遮挡骂过 | 久久精品国产亚洲av日韩| 国产免费久久精品99re丫y| 国产午夜亚洲精品不卡免下载| 亚洲精品卡2卡3卡4卡5卡区| 国产成在线观看免费视频| 一个人看的免费高清视频日本| 亚洲人成网站影音先锋播放| 国产jizzjizz免费看jizz| 久久精品毛片免费观看| 特级毛片全部免费播放a一级| 久久91亚洲精品中文字幕| 国产美女精品久久久久久久免费| 十八禁无码免费网站| 国产成人久久精品亚洲小说| 亚洲视频一区网站| 亚洲综合色婷婷七月丁香| 男人的好看免费观看在线视频| 中文字幕乱码免费看电影| 亚洲AV无码片一区二区三区| 久久亚洲国产精品成人AV秋霞| 亚洲精品无码99在线观看| 毛片免费vip会员在线看| 免费黄网站在线观看| 日韩精品免费一线在线观看| 中文字幕亚洲情99在线| 亚洲国产天堂久久综合网站 | 亚洲人成精品久久久久| 免费无码又爽又高潮视频| 亚洲一级免费毛片| 久久精品无码精品免费专区| 人妻免费久久久久久久了| 亚洲AV无码AV男人的天堂不卡| 亚洲同性男gay网站在线观看|