STERFIELD

HTML5のCanvasの画像処理に挑戦(透過率の変更)

HTML5のCanvasの画像処理に挑戦(透過率の変更)

最近対応ブラウザがIE9以上とその他最新のブラウザといった案件が増えてきており、

Canvasを実際のサイトに使う機会にも逢うようになりました。

 

そんな中、Canvasの特性を利用するために画像処理の技術がどうしても必要になるということに

今更ながら気付いたので、

その方法について調べてやってみることにしました。

 

今回はCanvasの画像処理の中で最も簡単だと思われる、

透過率の変更を使ったアニメーション、すなわちフェードイン・フェードアウトを

やってみましたのでご紹介いたします。

 

↓作ってみたもの

DEMO

 

 方法

まず、HTML、CSSを準備します。

HTML

 

CSS

ここでのポイントは、実際に画像を表示するCanvasとは別に、

画像を処理するためだけの、非表示のCanvasを配置することです。

 

続いてJavaScriptを記述します。

 

この中で、画像の透過処理の流れについてご説明いたします。

大きな流れは次の通り。

  1. 処理用のCanvasに画像を読み込み、仮想で表示する
  2. 処理用のCanvasから画像データを取得
  3. 画像データの透過度を変更する処理を行う
  4. 変更した画像データを表示用のCanvasに表示する

 

1. 処理用のCanvasに画像を読み込み、仮想で表示する

Canvasでフェードイン・フェードアウトの処理をする場合、

画像処理のため、一度処理前の画像をCanvas上に表示し、

そこから画像データを取得する必要があります。

フェードインのときの画像は、初めの段階ですでに透過度が0に変更されたものを表示しなければちらつきが発生してしまいます。

そのため、CSSでdisplay:noneに設定した処理用のCanvasに画像を読み込んで、仮想で表示するという処理が必要になります。

 

2. 処理用のCanvasから画像データを取得

処理用のCanvasに画像を仮想で表示したら、getImageData()というメソッドを使って画像データを取得します。

 

3. 画像データの透過度を変更する処理を行う

取得した画像データに変更を加えることで、透過度変更の画像処理を行います。

getImageData()で取得されるデータの中にdataというメソッドがあります。

dataメソッドは256段階の色情報がRGBA(赤、緑、青、透過度)の順番で1次元的に並んだものです。

image01

そのため、透過度を変更するには、このデータの中で、4つ飛ばしで存在する透過度の情報だけを変更すればいいことになります。

今回はFOR文を使ってこれを行いました。

上の例の場合、透過度が0に設定されるので、画像が完全な透明になります。

data[i + 3] = 127;にすれば半透明、data[i + 3] = 255;にすれば完全な不透明になるといった具合です。

 

4. 変更した画像データを表示用のCanvasに表示する

データの変更をしたら、そのデータをputImageData()というメソッドを使って表示用のCanvasに表示します。

 

単純な処理ではありますが、

画像処理の仕組みの理解と練習にはちょうどいいと思いますので、

是非試してみてください。

Author Profile

著者近影

NINOMIYA

Webデザイナー兼コーダー出身のフロントエンド開発者です。 UXデザインやチーム開発の効率化など、勉強中です。

SHARE

合わせて読みたい