HTML5項目筆記3:使用Canvas設計離線系統的Logo


HTML5 Cavans API可以動態來展示圖形、圖表、圖像以及動畫,我們的這個離線系統中,主要用來設計Logo用的。在網頁上使用Canvas的時,他會創建一塊矩形區域,默認情況下寬為300像素,高為150像素,當然,可以自定義。 

因為我們離線系統主要職責用於在離線的情況下的工作系統,如在上面寫工作日志,工作計划,和保存項目的評估數據;在網絡在線的情況下與服務器交互,並將數據保存到Server的數據庫中。所以我們的這個離線系統被命名為OFLMAIL,我們就根據這個名字來設計Logo 

canvas中的坐標是從左上角開始的,X軸從左到右橫向延伸,Y軸從上到下垂直延伸。通過坐標的刻量度來定位它的位置。 

 

 

我們先在頁面上放置一個canvas元素:

 <canvas id="canvas" width="380" height="35">Sorry, canvas not supported...</canvas>

 

使用canvas編程,首先要獲取其上下文context

 function MakeLogo() {

            var canvas = document.getElementById("canvas");

            if (canvas.getContext) {

                var ctx = canvas.getContext("2d");

     }

}

 

我們的第一個字是 O ,所以我們先把 O 字符畫出來,使用畫圓函數即可:

context . arc(x, y, radius, startAngle, endAngle, anticlockwise) 

參數分別是:

X:橫軸坐標位置 ;  

Y:縱軸坐標位置 ; 

圓開始的角度 ; 

圓閉合的角度 ; 

是否逆時針繪制(true or false) ;

 ctx.arc(17, 17, 15, 0, 9.42, true); // 開始畫圓

 ctx.lineWidth = 3; //線條的粗細程度 

 ctx.lineJoin = 'round';返回或設置線段的連接方式,默認為miter

miter

線段在連接處外側延伸直至交於一點,為默認值,外延效果受miterLimit的值影響,當外延交

點距離大於限制值時,則表現為bevel風格

round

連接處是一個圓角,圓的半徑等於線寬

bevel

連接處為斜角

  

ctx.lineCap = 'round';//context.lineCap 返回或設置線段的箭頭樣式,僅有三個選項:butt(默認值),round,square;

butt

每根線的頭和尾都是長方形,也就是不做任何的處理,為默認值

round

每根線的頭和尾都增加一個半圓形的箭頭

square

每根線的頭和尾都增加一個長方形,長度為線寬一半,高度為線寬

  ctx.strokeStyle = '#23A1DD';//填充的顏色 

 ctx.shadowBlur = 4; //陰影模糊程度,默認為0,數值越大,模糊程度越高,感覺越明顯

 ctx.shadowColor = '#909090'; //陰影顏色

 ctx.shadowOffsetX = 1; //橫軸的陰影像素

 ctx.shadowOffsetY = 1; //縱軸的陰影像素

 

 //創建字符F

 ctx.moveTo(41,35); //將數據上下文的位置移動到(41,35)的坐標位置

 ctx.lineTo(41, 2); //將數據上下文的位置移動到(41,35)的坐標位置

 ctx.lineTo(61,2);

 ctx.moveTo(41,15);

 ctx.lineTo(71,15);

 

 ctx.stroke();//stroke方法使用lineWidth,lineCap,lineJoin,以及strokeStyle對所有的子路徑進行填充

 ctx.save();//保存數據上下文 

 效果如下: 

 

//繼續在上面描畫L和M字符

ctx.moveTo(77, -1); //Create the L

ctx.lineTo(77, 32);

ctx.lineTo(102, 32);

ctx.moveTo(103, 34); //Create the M

ctx.lineTo(103, 0);

ctx.lineTo(120, 20);

ctx.lineTo(137, 0);

ctx.lineTo(137, 34); 

最后效果如下: 

 

// 這時我們要在上面填充一個圖片,來代替A字符,

// context.beginPath() //清空子路徑

// context.closePath() //閉合路徑

 

ctx.beginPath(); //開始執行路徑,這樣做的好處是清除當前的路徑.開始執行新的路徑,原來的一些設定都會被清除

ctx.moveTo(145, 2); 

var img1 = new Image();

img1.src = "../Images/1.png";

img1.onload = function () {

ctx.drawImage(img1, 145, 2); 

//drawImage函數的參數,drawImage(image,dx,dy) 

//image:傳入圖像 dx:左坐標  dy:左坐標

ctx.stroke();

ctx.save();

最后效果如下: 

當然,這個三角形圖片也可以直接用context畫出來,我們這邊有圖片,直接用圖片載入就行了。

 

最后,我們運用同樣的方法,完成上面那個Logo的剩余部分:

ctx.beginPath(); //Create the I

ctx.shadowBlur = 4;

ctx.shadowOffsetX = 0;

ctx.shadowOffsetY = 0;

 

ctx.moveTo(202, 3); //Create the O

ctx.strokeStyle = '#23A1DD';

ctx.fillStyle = '#23A1DD';

ctx.arc(185, 3, 3, 0, Math.PI * 2, true);

ctx.fill();

ctx.save();

 

ctx.beginPath();

ctx.moveTo(185, 35);

ctx.lineTo(185, 10);

 

ctx.moveTo(200, 0);

ctx.lineTo(200, 33);

ctx.lineTo(222, 33);

ctx.save();

ctx.stroke();

 

ctx.beginPath();

 

ctx.shadowBlur = 1;

ctx.shadowOffsetX = 0;

ctx.shadowOffsetY = 0;

 

最終我們的小清新Logo是這樣子的: 

 

根據W3C建議,如果只是簡單的文字和圖片的描述,用 H 標簽就可以解決了,圖片也可以用其他元素內嵌到標簽里面。 所以我們這個圖標用canvas 動態生成有點更繁瑣,但是在多元化的Logo圖標中,就是要用到canvas的一些特性,如: 

轉換:Transformations,

context.rotate(angle) 

context.scale(float x, float y);

橫軸和縱軸的放大或縮小,1.0 是 1:1的比例, 數值越大,放大越大。

如:context.scale(1.0,1.0):

context.scale(5.0,5.0):  

 

context.translate(x, y) //可以理解為偏移,向x,y方向偏移指定的量,其用來移動Canvas的原點到一個指定的值

context.strokeStyle = "#9CFF00";

context.translate(50 + j * 100, 50 + i * 100);

drawSpirograph(context, 20 * (j + 2) / (j + 1), -8 * (i + 3) / (i + 1), 10);

context.restore(); 

 

Canvas API還提供了很多的函數,用來協助處理和設計各種各樣的圖像。

還有一個比較有趣的就是動畫了,在HTML5 Canvas API 中,Canvas的清除矩形功能是創建動畫和游戲的核心功能。通過反復廢置和清除Canvas片段,就可以實現動畫效果,大家不妨試一下。

 

附件中有關於這個Logo的源碼和HTML5Canvas API的書籍,可以參考一下。

Canvas API 1.0 用戶幫助文檔  本文源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM