【画像フォーマット】これだけは押さえとけ！初心者向けSVG・JPEG・PNG使い分けガイド

# はじめに
こんにちは、エンジニア4年目の嶋田です。  

まずは、この記事を開いていただきありがとうございます！

今回は、Webやデザインで頻繁に使用される画像フォーマット、**SVG**、**JPEG**、**PNG**の違いについてまとめたいと思います。

画像の用途や目的に応じてどのフォーマットを使うべきか、迷った経験はありませんか?  
それぞれのフォーマットには特徴があり、メリットとデメリットを理解することで最適な選択が可能です！ 
ではいきましょう〜

# 目次
- [主な画像フォーマット一覧](#主な画像フォーマット一覧)
- [各フォーマットの定義](#各フォーマットの定義)
    - [SVGの特徴と使用例](#svgの特徴と使用例)
    - [JPEGの特徴と使用例](#jpegの特徴と使用例)
    - [PNGの特徴と使用例](#pngの特徴と使用例)
- [フォーマット別のメリット・デメリット](#フォーマット別のメリットデメリット)
- [用途に応じた使い分け](#用途に応じた使い分け)
    - [実際の使用例](#実際の使用例)
- [参考](#参考)
- [最後に](#最後に)

# 主な画像フォーマット一覧

| フォーマット | 形式       | 主な用途                        | 特徴概要                              |
|-------------|------------|-------------------------------------|------------------------------------------|
| SVG     | ベクター | ロゴ、アイコン、イラスト               | 拡大縮小しても画質劣化なし、操作性が高い     |
| JPEG    | ラスター | 写真、ウェブ画像、デジタルカメラ画像     | 高い圧縮率で自然なグラデーション表現          |
| PNG     | ラスター | アイコン、スクリーンショット、グラフィック| 可逆圧縮、透過対応、細部の再現性に優れる       |

---

**ベクター画像とラスター画像の違いについて**

- **ベクター画像**  
  ベクター画像は、画像を「点」や「線」、「曲線」といった数学的な要素(数式や座標)で表現します。  
  このため、どんなに拡大・縮小しても画質が劣化せず、ファイルサイズもシンプルな図形の場合は非常に小さく抑えることができます。  
  主にロゴやアイコン、イラストなど、比較的シンプルな構成の画像に適しています。

- **ラスター画像**  
  ラスター画像は、画像を小さなピクセル(点)の集合体として表現します。  
  このため、拡大するとピクセルが目立ちやすく、ぼやけやギザギザが発生することがあります。  
  しかし、写真や複雑な色のグラデーション表現には優れており、ディテールを豊かに再現することができます。



# 各フォーマットの定義

## SVG (Scalable Vector Graphics)
SVGはXMLベースのベクター画像形式です。  
拡大・縮小しても画質が劣化しないため、ロゴやアイコン、イラストに適しています。  
また、CSSやJavaScriptでスタイリングや動的な操作が可能なため、インタラクティブな表現にも向いています。

### SVGの特徴と使用例

#### 特徴
- **ベクター形式** ：どんなサイズにも対応して、画質が劣化しません。
- **軽量** ：シンプルな図形の場合、ファイルサイズが小さくなります。
- **動的操作** ：CSSやJavaScriptを使ってアニメーションやスタイル変更が可能です。

#### 使用例

##### ロゴやアイコン
```
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>
```

##### アニメーションの適用
```
@keyframes colorChange {
  0%   { fill: red; }
  50%  { fill: blue; }
  100% { fill: red; }
}

svg circle {
  animation: colorChange 2s infinite;
}
```

## JPEG (Joint Photographic Experts Group)
JPEGは[ロッシー圧縮](https://wa3.i-3-i.info/word14708.html)方式を採用しており、主に写真や複雑なグラデーションのある画像向けに使われます。  
圧縮率が高いためファイルサイズが小さくなりますが、繰り返しの保存や編集を行うと画質が劣化する恐れがあります。

### JPEGの特徴と使用例

#### 特徴
- **高圧縮率** ：複雑な画像や写真を比較的小さなファイルサイズにできます。
- **グラデーション表現** ：豊かな色彩や滑らかなグラデーションを自然に表現します。
- **非可逆圧縮** ：圧縮時に一度画質が落ちるので、何度も編集する場合は注意が必要です。

#### 使用例

##### 写真の表示 (HTML)
```
<img src="example.jpg" alt="JPEG画像の例">
```

##### 画像編集での保存
JPEG形式は画像編集ソフトで「品質」を調整して保存でき、用途に応じた最適な圧縮率を選ぶことが可能です。

## PNG (Portable Network Graphics)
PNGは可逆圧縮および透過をサポートする画像形式で、画質劣化がなく、ディテールの再現性に優れています。  
アイコンやスクリーンショット、グラフィックなど、クリアな表示が求められる場面に適しています。

### PNGの特徴と使用例

#### 特徴
- **可逆圧縮** ：保存時に画質が劣化しません。
- **透過対応** ：背景を透過させることができ、デザインの幅が広がります。
- **高精細** ：細かいディテールを忠実に再現できます。

#### 使用例

##### 透過画像の表示 (HTML)
```
<img src="example.png" alt="PNG画像の例">
```

# フォーマット別のメリット・デメリット

| フォーマット | メリット                                              | デメリット                                           |
|--------------|-------------------------------------------------------|------------------------------------------------------|
| SVG          | ・拡大縮小しても画質が劣化しない<br>・操作性が高い         | ・複雑な写真など、ベクターとして表現しにくい          |
| JPEG         | ・高い圧縮率でファイルサイズが小さい<br>・自然なグラデーション | ・圧縮による画質劣化の可能性<br>・透過がサポートされない   |
| PNG          | ・可逆圧縮で画質劣化がなく、透過が可能<br>・細部が鮮明に表現 | ・ファイルサイズが大きくなりやすい                   |

# 用途に応じた使い分け

画像フォーマットの選び方は、**目的(品質重視か、軽量化重視か)**や**利用シーン**により変わります。

- **ロゴやアイコン、イラスト**  
  → 拡大縮小や編集が必要な場合は、**SVG**を使いましょう。

- **写真や複雑な色彩の画像**  
  → ファイルサイズを抑えながらも自然なグラデーションを表現するために**JPEG**がおすすめです。

- **スクリーンショットや細部の表現が求められるグラフィック**  
  → 透過機能が必要な場合や、鮮明な表示が求められる場合は**PNG**が最適です。

### 実際の使用例

以下は、各フォーマットの画像を用いたシンプルなHTMLコード例です。

```
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>画像フォーマットの比較例</title>
  <style>
    .image-container {
      display: flex;
      gap: 1rem;
    }
    .image-container img, .image-container svg {
      max-width: 100%;
      border: 1px solid #ccc;
    }
  </style>
</head>
<body>
  <h1>画像フォーマットの比較例</h1>
  <div class="image-container">
    <div>
      <h2>SVG</h2>
      <!-- SVG画像の例 -->
      <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
        <rect x="10" y="10" width="80" height="80" fill="green" />
      </svg>
    </div>
    <div>
      <h2>JPEG</h2>
      <!-- JPEG画像の例 -->
      <img src="example.jpg" alt="JPEG画像の例">
    </div>
    <div>
      <h2>PNG</h2>
      <!-- PNG画像の例 -->
      <img src="example.png" alt="PNG画像の例">
    </div>
  </div>
</body>
</html>
```

# 参考
- https://developer.mozilla.org/ja/docs/Web/SVG
- https://developer.mozilla.org/ja/docs/Glossary/JPEG
- https://e-words.jp/w/image-png.html


# 最後に
以上、**SVG**、**JPEG**、**PNG**の画像フォーマットの特徴、メリット・デメリット、そして用途に応じた使い分けについてまとめてみました。

この記事を読み、画像フォーマット選択の基準が明確になり、実際のWeb制作やデザイン作業に役立てていただけたら幸いです。

何か間違いや疑問点、質問等あればコメントしていただけるとありがたいです🙇‍♂️