JA EN

Retina ディスプレイ対応画像の作り方 - 高 DPI 環境での鮮明な表示を実現する

· 約 9 分で読めます

なぜ Retina ディスプレイで画像がぼやけるのか - デバイスピクセル比の仕組み

Retina ディスプレイ (Apple の商標) や高 DPI ディスプレイでは、1 つの CSS ピクセルが複数の物理ピクセルで表示されます。この比率をデバイスピクセル比 (Device Pixel Ratio, DPR) と呼びます。DPR が 2 のディスプレイでは、1 CSS ピクセルが 2x2 = 4 物理ピクセルで描画されます。

画像がぼやける原因:

現在の主要デバイスの DPR:

JavaScript で現在のデバイスの DPR を取得するには window.devicePixelRatio を参照します。CSS メディアクエリでは @media (min-resolution: 2dppx) で高 DPI デバイスを判定できます。

srcset 属性による解像度切り替え - HTML での基本実装

HTML の srcset 属性は、ブラウザがデバイスの DPR に応じて最適な解像度の画像を自動選択する仕組みを提供します。開発者が複数の解像度の画像を用意し、ブラウザに選択を委ねることで、各デバイスに最適な画像を配信できます。

基本的な記述方法:

<img src="image-1x.jpg" srcset="image-1x.jpg 1x, image-2x.jpg 2x, image-3x.jpg 3x" alt="説明" width="300" height="200">

この記述により、DPR 1 のデバイスには image-1x.jpg (300 × 200 px)、DPR 2 のデバイスには image-2x.jpg (600 × 400 px)、DPR 3 のデバイスには image-3x.jpg (900 × 600 px) が配信されます。

w ディスクリプタを使った幅ベースの指定も可能です:

<img src="image-300w.jpg" srcset="image-300w.jpg 300w, image-600w.jpg 600w, image-900w.jpg 900w" sizes="(max-width: 600px) 100vw, 300px" alt="説明">

sizes 属性はブラウザに「この画像が画面上でどのくらいの幅で表示されるか」を伝えます。ブラウザはこの情報と DPR を組み合わせて、最適な画像を選択します。例えば、sizes="300px" で DPR 2 のデバイスなら、600w の画像が選択されます。

実装上の注意点:

picture 要素とアートディレクション - デバイスに応じた画像の出し分け

<picture> 要素は srcset よりも細かい制御が可能で、デバイスの特性に応じて全く異なる画像を配信できます。これを「アートディレクション」と呼び、単なる解像度の切り替えではなく、構図やクロップ位置を変えた画像を出し分けるために使用します。

アートディレクションの実装例:

<picture>
<source media="(max-width: 767px)" srcset="hero-mobile-1x.webp 1x, hero-mobile-2x.webp 2x" type="image/webp">
<source media="(max-width: 767px)" srcset="hero-mobile-1x.jpg 1x, hero-mobile-2x.jpg 2x">
<source media="(min-width: 768px)" srcset="hero-desktop-1x.webp 1x, hero-desktop-2x.webp 2x" type="image/webp">
<source media="(min-width: 768px)" srcset="hero-desktop-1x.jpg 1x, hero-desktop-2x.jpg 2x">
<img src="hero-desktop-1x.jpg" alt="ヒーロー画像" width="1200" height="600">
</picture>

この例では、モバイルとデスクトップで異なる構図の画像を配信しつつ、各デバイスの DPR に応じた解像度も提供しています。さらに WebP 対応ブラウザには WebP を、非対応ブラウザには JPEG をフォールバックとして配信します。

アートディレクションが必要なケース:

<picture> 要素の <source> は上から順に評価され、最初にマッチした条件の画像が使用されます。条件にマッチしない場合は <img> 要素がフォールバックとして表示されます。

CSS での高 DPI 対応 - image-set() と背景画像の最適化

CSS の背景画像やコンテンツ画像に対しても、高 DPI ディスプレイへの対応が必要です。image-set() 関数を使えば、CSS レベルでデバイスの DPR に応じた画像切り替えが可能です。

image-set() の基本構文:

.hero {
background-image: image-set(
url('bg-1x.webp') type('image/webp') 1x,
url('bg-2x.webp') type('image/webp') 2x,
url('bg-1x.jpg') type('image/jpeg') 1x,
url('bg-2x.jpg') type('image/jpeg') 2x
);
}

2026 年時点で image-set() は主要ブラウザすべてで対応していますが、古いブラウザ向けにフォールバックを提供する場合は、メディアクエリを使った方法も併用します:

.hero {
background-image: url('bg-1x.jpg');
}
@media (min-resolution: 2dppx) {
.hero {
background-image: url('bg-2x.jpg');
}
}

SVG を背景画像として使用する場合は、解像度の切り替えが不要です。SVG はベクター形式のため、どの DPR でも鮮明に表示されます。アイコン、ロゴ、パターン背景には SVG を積極的に活用することで、複数解像度の画像を用意する手間を省けます。

CSS の border-imagemask-image にも同様の高 DPI 対応が必要です。特に border-image で 1px のボーダーを画像で表現する場合、DPR 2 では 2px の画像が必要になります。この場合も image-set() またはメディアクエリで対応します。

画像書き出しワークフロー - 効率的な複数解像度の生成

Retina 対応画像を効率的に生成するためのワークフローを構築することが、運用コストの削減に直結します。手動で複数解像度を書き出すのは非現実的なため、自動化パイプラインの構築が必須です。

推奨ワークフロー:

書き出し設定の目安:

高解像度画像は品質設定を下げても、物理ピクセルが密集しているため視覚的な劣化が目立ちにくいという特性があります。2x 画像を品質 70 で書き出しても、DPR 2 のディスプレイでは 1x 品質 85 と同等以上に見えることが多いです。

パフォーマンスとのバランス - 高 DPI 対応のコスト管理

高 DPI 対応は画質向上に直結しますが、ファイルサイズの増大というコストを伴います。2x 画像は 1x の約 4 倍 (面積比)、3x 画像は約 9 倍のピクセル数を持つため、適切な最適化なしではページの読み込み速度に深刻な影響を与えます。

パフォーマンスを維持するための戦略:

Core Web Vitals への影響を監視するため、Lighthouse や PageSpeed Insights で定期的にパフォーマンスを計測し、画像サイズが LCP スコアに悪影響を与えていないか確認することが重要です。

関連記事

レスポンシブ画像の実装ガイド - srcset, sizes, picture 要素の完全解説

デバイスの画面サイズや解像度に応じて最適な画像を配信するレスポンシブ画像の実装方法を、コード例とともに詳しく解説します。

画像の遅延読み込み実装ガイド - loading=lazy と IntersectionObserver の使い分け

Web ページの初期表示速度を改善する画像遅延読み込みの実装方法を、ネイティブ API と JavaScript の両アプローチで解説します。

アートディレクションでデバイス別に画像を出し分ける - picture 要素と media 属性の実践

レスポンシブ画像のアートディレクション手法を解説。picture 要素と media 属性でデバイスごとに最適な構図の画像を配信し、ユーザー体験とパフォーマンスを両立させます。

Web 画像最適化チェックリスト - 実務で使える 15 項目を徹底解説

Web サイトの画像最適化に必要な 15 のチェック項目を実務視点で解説。Core Web Vitals 改善に直結する具体的な施策と優先順位を紹介します。

WebP のメリットと対応状況 - 次世代画像フォーマットの実力

Google が開発した WebP フォーマットのメリット、デメリット、ブラウザ対応状況を解説。JPEG や PNG からの移行判断に必要な情報をまとめます。

Web サイトの画像パフォーマンス監査 - Core Web Vitals 改善の実践ガイド

Web サイトの画像がパフォーマンスに与える影響を監査する方法を解説。LCP 改善、CLS 防止、転送量削減の具体的な手法を紹介します。

関連用語