Webページの画像が灰色になる3つの実現方法

5306 ワード

.div1 a:hover img{filter:alpha(Opacity=80);-moz-opacity:0.8;opacity: 0.8;}
1、CSS Filter
CSSフィルタプロパティを使用すると、最も簡単な方法で画像を階調にすることができます.従来、IEブラウザには独自のCSS属性があり、フィルタリングアプリケーションと呼ばれるカスタム効果には階調が含まれている.
現在、フィルタ属性はCSS 3仕様の一部であり、一部のブラウザ、Firefox、Chrome、Safariでサポートされています.以前はWebkitフィルタにも言及していましたが、画像をグレーにするだけでなく、褐色やぼかし効果にもなります.
画像をグレーに変更するには、次のCSSスタイルを追加します.
img {
 -webkit-filter: grayscale(1);/* Webkit */
 filter:gray;/* IE6-9 */
 filter: grayscale(1);/* W3C */
}

IE 6-9とWebkitブラウザ(Chrome 18+,Safari 6.0+,and Opera 15+)をサポート
(注意:このコードはFirefoxでは効果がありません.)
  2、Javascript
2つ目の方法は、JavaScriptテクノロジーを使用して、IE 6以下を含むすべてのJavaScriptをサポートすべきブラウザを使用することです.
 1 varimgObj = document.getElementById('js-image');
 2 functiongray(imgObj) {
 3  varcanvas = document.createElement('canvas');
 4  varcanvasContext = canvas.getContext('2d');
 5  
 6  varimgW = imgObj.width;
 7  varimgH = imgObj.height;
 8  canvas.width = imgW;
 9  canvas.height = imgH;
10  
11  canvasContext.drawImage(imgObj, 0, 0);
12  varimgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
13  
14  for(vary = 0; y < imgPixels.height; y++){
15  for(varx = 0; x < imgPixels.width; x++){
16  vari = (y * 4) * imgPixels.width + x * 4;
17  varavg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
18  imgPixels.data[i] = avg;
19  imgPixels.data[i + 1] = avg;
20  imgPixels.data[i + 2] = avg;
21  }
22  }
23  canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
24  returncanvas.toDataURL();
25 }
26 imgObj.src = gray(imgObj);

3、SVG
第3の方法はSVG Filterから来ている.SVGファイルを作成し、以下のコードを書き込んで、**と名前を付けて保存する必要があります.svg
1 <svgxmlns=" http://www.w3.org/2000/svg">
2  <filterid="grayscale">
3  <feColorMatrixtype="matrix"values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/>
4  </filter>
5 </svg>

そしてフィルタの属性を利用して、SVGファイルの中の要素のIDを通じてSVGファイルに接続することができます
1 img {
2  filter:url('img/gray.svg#grayscale');
3 }

CSSファイルに入れることもできます.たとえば、次のようにします.
1 img {
2  filter:url('url("data:image/svg+xml;utf8,<svg%20xmlns=' http://www.w3.org/2000/svg'><filter%20id='grayscale'><feColorMatrix%20type='matrix'%20values='0.3333%200.3333%200.3333%200%200%200.3333%200.3333%200.3333%200%200%200.3333%200.3333%200.3333%200%200%200%200%200%201%200'/></filter></svg>#grayscale");')
3 }

まとめ
ブラウザにまたがって階調をサポートする効果を越えるために,上記の方法を以下のコードクリップを併用して実現することができる.このコードはFirefox 3.5+,Opera 15+,Safari,Chrome,and IEをサポートします.
1 img {
2  -webkit-filter: grayscale(100%);
3  -webkit-filter: grayscale(1);
4  filter: grayscale(100%);
5  
6  filter:url('../img/gray.svg#grayscale');
7  filter:gray;
8 }

上記のコードとJavaScriptメソッドを利用して、JavaScriptが無効にならないようにCSSフィルタのみをバックアップとして提供することができます.このアイデアは容易にModernizrの助けで実現できる.
.no-js img {
 -webkit-filter: grayscale(100%);
 -webkit-filter: grayscale(1);
 filter: grayscale(100%);
 
 filter:url('../img/gray.svg#grayscale');
 filter:gray;
}

OK、あなたのブラウザには素晴らしい効果が見られます!!