ホームページ > 記事 > ウェブフロントエンド > HTML5 の新しいラベル Canvas の詳細な紹介
キャンバスはWebページに画像を表示するために使用され、コンテンツをカスタマイズできます。基本的にはビットマップです。 (ビットマップ) Canvas
APIは、Web ページ上で画像コンテンツをリアルタイムに生成するために使用されます。これには、HTTP リクエストの数が削減され、量が削減されるという利点があります。 Web ページの読み込み時間を短縮し、画像をリアルタイムで処理できます 使用する前に、まず Canvas Web 要素を作成する必要があります
<canvas id="myCanvas" width="400" height="200"> 您的浏览器不支持canvas! </canvas>
ブラウザがキャンバスをサポートしていない場合は、 Canvas タグの真ん中に「このブラウザは Canvas をサポートしていません!」というテキストが表示されます。
次に、
JavaScriptを使用して Canvas の DOM オブジェクトを取得します。 getContext メソッドがデプロイされているかどうかを確認して、ブラウザーが Canvas API をサポートしているかどうかを確認します。var canvas = document.getElementById('myCanvas');
getContext ('2d') メソッドを使用して、フラット イメージのコンテキストを初期化します。
if (canvas.getContext) { //some code here}
次に、キャンバスの中央にフラット イメージを生成します。 .
2. Drawing method
(1) Fill color
var ctx = canvas.getContext('2d');
Draw a hollow rectangle.
ctx.fillStyle = "#000000";//设置填充色为黑色ctx.strokeStyle = "#FF6600"; //设置笔触颜色
Clear
ctx.fillStyle = "#000000";//填充颜色,即矩形颜色ctx.fillRect(x, y, width, height);(3) パスを描画する
ctx.strokeStyle = "#FF6600"; //笔触颜色,即矩形边框颜色ctx.strokeRect(x, y, width, height);
円と扇形を描画するメソッド ctx.clearRect(x, y, width, height);
arc メソッドの x と y パラメータは中心の座標です。円の半径、radius は半径、startAngle と endAngle はセクターの開始角度と終了角度 (度で表されます)、反時計回りは描画を反時計回り (true) または時計回り (false) のどちらで描画するかを示します。実線の円
ctx.beginPath(); //开始路径绘制 ctx.moveTo(20, 20); //设置路径起点 ctx.lineTo(200, 20); //绘制一条到200, 20的直线 ctx.lineWidth = 1.0; //设置线宽 ctx.strokeStyle = "#CC0000"; //设置线的颜色 ctx.stroke(); //进行线的着色,这时整条线才变得可见中空の円を描画します (5) テキストを描画します
テキストを追加するには、fillText メソッドを使用し、白抜きの文字を追加するには、strokingText メソッドを使用します。使用する前に、フォント、テキストを設定する必要があります。方向、色、その他の
属性。
ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
fillText メソッドはテキストの改行をサポートしていません。つまり、複数行のテキストを生成したい場合は、 を呼び出すだけです。 fillText メソッドを複数回実行します。
2.1 Gradient
createLinearGradient メソッドの参照は (x1, y1, x2, y2) です。ここで、x1 と y1 は始点の座標、x2 と y2 は終点です。さまざまな座標値を使用して、上から下、左から右などのグラデーションを生成できます。
addColorStop メソッドのパラメーターは (offset, color) です。ここで、offset は 0.0 から 1.0 の範囲の浮動小数点値で、グラデーションの開始点と終了点の間の部分を表します。オフセット 0 が対応します。 Offset は終点に対応し、color は CSS カラー値の文字列表現です。使用方法は以下の通りです:
ctx.beginPath(); ctx.arc(60, 60, 50, 0, Math.PI*2, true); ctx.fillStyle = "#000000"; ctx.fill();2.2 影
ctx.beginPath(); ctx.arc(60, 60, 50, 0, Math.PI*2, true); ctx.lineWidth = 1.0; ctx.strokeStyle = "#000"; ctx.stroke();3, 画像処理方法3.1 画像を挿入canvasは画像ファイルをキャンバスに挿入する方法です。キャンバスで再描画するには、drawImage メソッドを使用します。
ctx.font = "Bold 20px Arial"; //设置字体 ctx.textAlign = "left"; //设置对齐方式 ctx.fillStyle = "#008600"; //设置填充颜色 ctx.fillText("Hello!", 10, 50); //设置字体内容,以及在画布上的位置 ctx.strokeText("Hello!", 10, 100); //绘制空心字
画像の読み込みに時間がかかるため、画像の読み込みが完了してからでないとdrawImageメソッドを呼び出すことができないため、上記のコードを書き直す必要があります。
var myGradient = ctx.createLinearGradient(0, 0, 0, 160); myGradient.addColorStop(0, "#BABABA"); myGradient.addColorStop(1, "#636363");
drawImage() メソッドは 3 つのパラメータを受け取ります。最初のパラメータは画像ファイルの DOM 要素 (つまり、
img タグ)、2 番目と 3 番目のパラメータは画像の左上隅の座標です。上記の例の Canvas 要素の , (0, 0) は、画像の左上隅を Canvas 要素の左上隅に配置することを意味します。
3.2 Canvas の内容を読み取るctx.fillStyle = myGradient; ctx.fillRect(10, 10, 200, 100);
です。この配列の値は、順番に各ピクセルの赤、緑、青、およびアルファ チャネルの値です。したがって、配列の長さは、画像のピクセル幅 * 画像のピクセル高さ * 4 に等しくなります。 、各値の範囲は 0 ~ 255 です。この配列は読み取りだけでなく書き込みも可能であるため、この配列の値を操作することで、画像を操作する目的を達成できます。この配列を変更した後、putImageData メソッドを使用して、配列の内容を Canvas に書き戻します。
ctx.shadowOffsetX = 10; //设置水平位移 ctx.shadowOffsetY = 10; //设置垂直位移 ctx.shadowBlur = 5; //设置模糊度 ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; //设置阴影颜色 ctx.fillStyle = "#CC0000"; ctx.fillRect(10, 10, 200, 100);3.3 ピクセル処理 フィルターがピクセルを処理する
関数であると仮定すると、Canvas の処理プロセス全体は次のコードで表すことができます。 var img = new Image();
img.src = "image.png";
ctx.drawImage(img, 0, 0); //设置对应的图像对象,以及它在画布上的位置
以下は一般的な治療法です。
(1)灰度效果
灰度图(grayscale)就是取红、绿、蓝三个像素值的算术平均值,这实际上将图像转成了黑白形式。假定d[i]是像素数组中一个像素的红色值,则d[i+1]为绿色值,d[i+2]为蓝色值,d[i+3]就是alpha通道值。转成灰度的算法,就是将红、绿、蓝三个值相加后除以3,再将结果写回数组。
grayscale = function(pixels) { var d = pixels.data; for (var i = 0; i < d.length; i += 4) { var r = d[i]; var g = d[i + 1]; var b = d[i + 2]; d[i] = d[i + 1] = d[i + 2] = (r + g + b) / 3; } return pixels; }
(2)复古效果
复古效果(sepia)则是将红、绿、蓝三个像素,分别取这三个值的某种加权平均值,使得图像有一种古旧的效果。
sepia = function(pixels) { var d = pixels.data; for (var i = 0; i < d.length; i +=4) { var r = d[i]; var g = d[i + 1]; var b = d[i + 2]; d[i] = (r * 0.393) + (g * 0.769) + (b * 0.189); //red d[i + 1] = (r * 0.349) + (g * 0.686) + (b * 0.168); //green d[i + 2] = (r * 0.272) + (g * 0.534) + (b * 0.131); //blue } return pixels; }
(3)红色蒙版效果
红色蒙版指的是,让图像呈现一种偏红的效果。算法是将红色通道设为红、绿、蓝三个值的平均值,而将绿色通道和蓝色通道都设为0。
red = function(pixels) { var d = pixels.data; for (var i = 0; i < d.length; i += 4) { var r = d[i]; var g = d[i + 1]; var b = d[i + 2]; d[i] = (r + g + b) / 3; //红色通道取平均值 d[i + 1] = d[i + 2] = 0; } return pixels; }
(4)亮度效果
亮度效果(brightness)是指让图像变得更亮或更暗。算法将红色通道、绿色通道、蓝色通道,同时加上一个正值或负值。
brightness = function(pixels, delta) { var d = pixels.data; for (var i = 0; i < d.length; i += 4) { d[i] += delta; //red d[i + 1] += delta; //green d[i + 2] += delta; //blue } return pixels; }
(5)反转效果
反转效果(invert)是指图片呈现一种色彩颠倒的效果。算法为红、绿、蓝通道都取各自的相反值(255 - 原值)。
invert = function(pixels) { var d = pixels.data; for (var i = 0; i < d.length; i += 4) { d[i] = 255 - d[i]; d[i + 1] = 255 - d[i + 1]; d[i + 2] = 255 - d[i + 2]; } return pixels; }
对图像数据作出修改以后,可以使用toDataURL方法,将Canvas数据重新转化成一般的图像文件形式。
<p style="margin-bottom: 7px;">function convertCanvasToImage(canvas) { <br/>var image = new Image();<br/> image.src = canvas.toDataURL("image/png"); <br/> return image;<br/>}</p>
save方法用于保存上下文环境,restore方法用于恢复到上一次保存的上下文环境。
ctx.save(); ctx.shadowOffsetX = 10; ctx.shadowOffsetY = 10; ctx.shadowBlur = 5; ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; ctx.fillStyle = "#CC0000"; ctx.fillRect(10, 10, 150, 150); ctx.restore(); ctx.fillStyle = "#000000"; ctx.fillRect(180, 10, 150, 100);
上面的代码一共绘制了两个矩形,前一个有阴影,后一个没有。
以上がHTML5 の新しいラベル Canvas の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。