Webで使う画像ファイルについて

先日、長女の運動会で日焼け止めを塗り忘れ、手の甲だけ日焼けしている池島です。

ブラウザが年々進化して、UIが向上したり、表示が速くなったりしていますが、進化した機能の中に、表示できる画像ファイルの形式が増えたことがあります。
使える形式が増えたことで、どれを使うか迷うような場面も出てきました。

使える画像のファイル形式と、それぞれの利点、欠点などをまとめてみます。

GIF

初期から使える形式で、安心して使えます。
近年はPNGの方がよく使われるようになり、出番は少なくなりましたが、アニメーテッドGIFにできるので、ローディング中のアニメーションアイコンに使われたりしています。

○ 古いブラウザでも表示できる。
○ ちょっとしたアニメーションが作れる。
× 背景を透過させる場合は、指定したマットカラーが透明部分に適用され、背景色がマットカラーと違う場合はギザギザの縁が見えてしまう。
× 256色に限定される。
× 色数、ピクセル数が多いと、ファイルサイズが大きくなりがち。

JPEG

写真などに使うフォーマットですね。
これも、古くから使われている安心感があります。
デジカメの標準保存フォーマットになっていることも多いので、撮影してそのまま使ったりもできます(基本的に、サイズ調整やレタッチをしますが。)

○ 古いブラウザでも表示できる。
○ 写真で使うなら、ほぼこれしかない。
× 背景を透過できない。
× ファイルサイズを落としすぎると、ノイズが発生する。画質とファイルサイズが折り合うところを見極めないといけない。

PNG

過去、GIFのライセンス問題があった時期に、急速に普及したような気がします。
現在では、ほとんどの環境・ブラウザで利用できます。
アニメーションPNG(APNG)もありますが、対応ブラウザが少なく、まだ一般的ではありません。

PNG8

ほぼ、GIFと同じ特徴を持っています。
現在は、GIFよりもPNGを使うことが多いですね。

○ GIFより小さいファイルサイズで書き出せることが多い。
× アニメーションPNGに対応した環境が少ないため、静止画でしか利用できない。

PNG24

○ フルカラー対応。
○ アルファチャンネルをサポートしている。
× 画質や色数を調整できないので、ファイルサイズが大きくなりやすい。

SVG

最新のブラウザなら、全てサポートしている状況になりました。
アイコンやロゴなど、ベクトルで描いているものは、全部SVGにしてしまいたいところですが、なかなかそういうわけにもいきませんね。

○ ベクトルデータをそのまま扱えるので、拡大・縮小したり高解像度ディスプレイでもきれいに表示できる。そのため、解像度別にファイルを用意する必要がない。
○ XMLデータとして、インラインに直接書き込める。
○ インラインで書いた場合、CSSやJavascriptで色を変えたりアニメーションさせたりできる。
○ フルカラー対応。
× インラインで書き込む場合のXMLが複雑で、解読し難い。
× 全ての機能がサポートされているブラウザが、まだ少ない。
× 写真のような画像は扱えない。

アイコンフォント

Webフォントアイコンと言ったりもします。
画像のファイル形式ではありませんが、アイコンなどの簡易な図柄を表示する手段として、併記します。

SVGからアイコンフォントを生成できるジェネレーターのサイトもあり、GulpやGruntなどを使って自動で生成する方法もあります。
繰り返し使うアイコンや矢印、テキストと並べて利用する場合などに利用するといいと思います。

○ サイズや色をCSSで設定でき、フォーカス時などの色・サイズ変更も簡単。
○ 拡大・縮小してもきれいに表示できる。
○ テキストとベースラインを揃えやすい。
× 単色のみ。
× SVGからフォントに変換したり、CSSでフォントの設定をしたりと、使うまでの手順が多い。

Flash

HTML5 + CSS3の普及で、すっかり陰に潜んでしまいました。
どこもかしこもFlashが使われ、勢いのあった時代が懐かしいです。
Androidのブラウザも、標準対応しなくなってしまいました。

○ アニメーションが自由自在で、動画の埋め込みも簡単にできる。
○ 複雑なスクリプトを組むことができ、データベースと連携させたり、動的なコンテンツ作成が可能。
× プラグインが必要。スマートフォンはほとんど対応していない。
× 保守にコストがかかり、再利用しにくい。
× 作成ツールやActionScriptを使えるようになるまでの学習コストがかかる。

どのファイル形式にしようか迷うとき

Web制作に携わっているとき、どのファイル形式にしようか迷うことが多々あります。
いろいろな考え方があり、プロジェクトごとの違いもあると思いますが、個人的な見解を書いておきます。

GIF or PNG8

今時は、PNGを使うのが一般的。
ファイルサイズの制限が厳しい場合を除き、PNG24で書き出した方が良さそう。

PNG8 or PNG24

背景色が固定で変化しない、可能な限りファイルサイズを落としたい、などの理由がない限りはPNG24にしておいた方が、汎用性が高く無難。

JPEG or PNG24

写真の背景を透過させたり、一部を透明にしたいなど、アルファチャンネルが必要ならPNG24。そうでないならJPEG。

PNG or SVG

ベクトルデータが元になっているなら、ぜひSVGを使いたい。
古いブラウザもターゲットになっているなら、PNGを解像度別に用意する。

SVG or アイコンフォント

繰り返し使うアイコンや、テキストと混在させて使うような場合はアイコンフォント。挿し絵や図表のような使い方ならSVG。

まとめ

Webブラウザでできることが増えて、嬉しい反面、置いて行かれまいと必死について行っています。
昔は、できないことが多くていろんな裏技を使ったりもしたけれど、あまり難しいこともなくてよかったなあ・・・などと思ってはいけませんね。

SVGはできることが多く、可能性が広がります。その機能を使いこなして、ステキなWebページ制作に活かしていきたいです。

このエントリーをはてなブックマークに追加