HTML5 の新しいラベル Canvas の詳細な紹介

黄舟
リリース: 2017-03-30 13:07:52
オリジナル
1727 人が閲覧しました

1. 概要

キャンバスは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 をサポートしているかどうかを確認します。

getContext ('2d') メソッドを使用して、フラット イメージのコンテキストを初期化します。

if (canvas.getContext) {    //some code here}
ログイン後にコピー

次に、キャンバスの中央にフラット イメージを生成します。 .

2. Drawing method

(1) Fill color

Set the fill color. (2) Draw a rectangle

Draw a solid rectangle.

var ctx = canvas.getContext(&#39;2d&#39;);
ログイン後にコピー

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 の内容を読み取る

getImageData メソッドを使用して Canvas の内容を読み取り、各ピクセルの情報を含むオブジェクトを返すことができます。
ctx.fillStyle = myGradient;

ctx.fillRect(10, 10, 200, 100);
ログイン後にコピー

imageDataオブジェクトにはデータ属性があり、その値は

一次元配列

です。この配列の値は、順番に各ピクセルの赤、緑、青、およびアルファ チャネルの値です。したがって、配列の長さは、画像のピクセル幅 * 画像のピクセル高さ * 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 の処理プロセス全体は次のコードで表すことができます。

以下は一般的な治療法です。

(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;

}
ログイン後にコピー

3.4 将Canvas转化为图像文件

对图像数据作出修改以后,可以使用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>
ログイン後にコピー

4、保存和恢复上下文

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート