コハム

Webクリエイターのコハムが提供する、Web制作に役立つ情報をまとめたブログです。

90年代ゲームファン歓喜!ピクセルアートを完璧に再現するWeb技術

Keeping Pixely Images Pixely (and Performant!)

記事は上記記事を意訳したものです。

※当ブログでの翻訳記事は元サイト様に許可を得て掲載しています。


Marcが先週、今年の大きなプロモーションの一環として必要だった技術について言及した後、デザインの美学に関連する別のことを思い出しました。

背景画像の水平スライスがこのブログで使用され、このCSSプロパティのおかげで画像サイズが非常に小さくなりました。

すべてが8ビット風のピクセル調の見た目になっているのがわかりますか?画像(<img>要素)に適用できるCSSプロパティがあり、それによってスケーリング時の見た目が変わります。例えば、このような画像があるとします:

どのような場合でも、おそらくこのようにしたいでしょう:

.castle-landscape-image {
  image-rendering: pixelated;
}

どの方向にサイズ変更しても、これだけでより良く見えるでしょう。image-rendering: crisp-edges;というものもありますが、これは特にピクセルアートのためのものだそうです。ただ、あまり違いは感じられません。

ここでもう一つできるクールなことは、オリジナルのアートをできるだけ小さくすること(おそらく元々作成されたサイズ)です。そうすることで、それ以上のスケーリングでもアンチエイリアス(ぼやけた縁)が全く発生しません。上記の例では、オリジナルがなく高解像度版しかなかったので、最適な場所を見つけるためにどんどん縮小してみました。画像スペースを大幅に節約しながらも、まだ問題なく見えるポイントを探しています。

この技術の別のユースケースとしてQRコードがあります。このQRコードは393バイト(超小さい!)です。ここで大きく表示してみると、どれだけ完璧に見えるかがわかります:

同じQRコードのSVG版は33 KBあります。これは(非常にまれな)ケースで、シンプルなベクター風のグラフィックが、本来ベクターであるSVGよりもバイナリ画像から提供される方が良い例です。

さらに極端な例として、78バイトのGIF(Photoshopで手作業でピクセル描画し、メタデータなしでエクスポートしてこのサイズになりました)があります。これは大きくスケールアップできます。上が小さな自然サイズのもので、下が大きくしたものです:

上記にcrisp-edgesの値を試すと、うまくいかないようです。つまり、値の間には何らかの違いがあるに違いありません。

結論:ピクセル調の<img>がある場合は、image-rendering: pixelated;を適用し、サイズを節約するためにできるだけ小さくしましょう。

©コハム