# PNG to GIF

> PNGをブラウザ内でGIFの256色パレットへ減色。アニメーションPNGならコマも表示間隔も残り、実測では1,689,485バイトが792,677バイトになりました。

- URL: https://bytescope.dev/ja/image-convert/png-to-gif/
- Locale: ja · Also: [en](https://bytescope.dev/en/image-convert/png-to-gif.md) · [zh-Hant](https://bytescope.dev/zh-Hant/image-convert/png-to-gif.md)
- Runs: ファイルはブラウザから送信されません — 処理はすべてローカルで行われます。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

### PNGからGIFにすると失われるもの

まず色が減ります。しかも控えめな減り方ではありません。すべての画素を最大256色のパレットへ割り当て直す必要があり、その上限は上のスライダーで決まります。パレットは`@tools/core-image`の量子化器が選び、ディザリングを切らない限りFloyd–Steinbergの誤差拡散で塗り分けます。数万色を使っていた写真を256色で描き直すので、空や肌にはトーンジャンプが出て、誤差拡散はそれを細かい点の模様でごまかします。ディザを切ると点は消えますが、代わりに境目のはっきりした帯が現れます。もともと色数の少ないフラットな図版、ピクセルアート、スクリーンショットはほとんど変化しません。

透明度は残りますが、1ビット分だけです。減色の前にアルファを128で二値化し、それより不透明な画素は完全な不透明、薄い画素は完全な透明になります。中途半端に透けていた画素は、その判定に入る前に設定の背景色と合成されます。つまり滑らかなアンチエイリアスの縁やドロップシャドウは階段状の輪郭に変わり、そうした画素が見つかった時点で警告が出ます。透明を含む場合はパレットを1枠使うため、絵に回せるのは256色ではなく255色です。

一方で、動きは失われません。ブラウザの`ImageDecoder`がコマを複数見つけると、変換はアニメーション用の経路に入ります。全コマから色を集めて共通のパレットを1つ作り、各コマは変化した領域だけを書き出して、元の表示間隔とループ設定を引き継ぎます。逆にGIFがまったく持てないのはメタデータです。ICCプロファイルもEXIFも、8ビットを超える深度も仕様のどこにもないので、16ビットの原本もDisplay P3のタグも、パレットの話に入る前に消えています。

### 実測でファイルサイズがどう変わったか

2026-09-12にapps/web/scripts/measurePairs.tsが測ったのは、libheifのコミット固定サンプルから作った1280 × 854のPNGで、「最適化 (oxipng)」をオンにして1,689,485バイトでした。このツールではそのオプションは既定でオフです。256色・Floyd–Steinberg・背景白でGIFにすると792,677バイト、約53%減です。可逆形式に変換して半分になるのは奇妙に見えますが、削ったのは色の情報そのもので、GIFは残った分を正確に格納しただけです。パレットを絞ればさらに小さくなり、その分トーンジャンプも目立ちます。ディザは点のノイズなのでLZWが圧縮しにくく、かえってサイズを押し上げます。アニメーションはコマ数だけ費用がかかるので、この比率はあてになりません。

### PNGをGIFにしない方がよい場面

写真は、受け取る側がGIFしか通らないのでない限り避けてください。256色はどのパレット設定でも見て分かる劣化で、WebPやAVIFなら全色をはるかに少ないバイト数で収められます。縁を柔らかく保ちたいロゴも向きません。1ビットの判定でギザギザになり、別の色を背景に合成された素材なら縁に色の輪も残ります。16ビットの原本、アプリのアイコン用素材、これから編集し直すファイルも同じです。向いているのはピクセルアートやフラットな図版、どのチャットでも自動再生される形式で短い動きを渡したいとき、新しい形式が通らないメール用テンプレート、そして対応形式が九〇年代で止まっている機器やソフトです。

変換はすべてブラウザ内で完結します — アップロードなし、待ち行列なし、ウォーターマークなし。ファイルはいくつでもドロップでき、個別またはZIPでダウンロードできます。

## Limits

まず色が減ります。しかも控えめな減り方ではありません。すべての画素を最大256色のパレットへ割り当て直す必要があり、その上限は上のスライダーで決まります。パレットは`@tools/core-image`の量子化器が選び、ディザリングを切らない限りFloyd–Steinbergの誤差拡散で塗り分けます。数万色を使っていた写真を256色で描き直すので、空や肌にはトーンジャンプが出て、誤差拡散はそれを細かい点の模様でごまかします。ディザを切ると点は消えますが、代わりに境目のはっきりした帯が現れます。もともと色数の少ないフラットな図版、ピクセルアート、スクリーンショットはほとんど変化しません。

透明度は残りますが、1ビット分だけです。減色の前にアルファを128で二値化し、それより不透明な画素は完全な不透明、薄い画素は完全な透明になります。中途半端に透けていた画素は、その判定に入る前に設定の背景色と合成されます。つまり滑らかなアンチエイリアスの縁やドロップシャドウは階段状の輪郭に変わり、そうした画素が見つかった時点で警告が出ます。透明を含む場合はパレットを1枠使うため、絵に回せるのは256色ではなく255色です。

一方で、動きは失われません。ブラウザの`ImageDecoder`がコマを複数見つけると、変換はアニメーション用の経路に入ります。全コマから色を集めて共通のパレットを1つ作り、各コマは変化した領域だけを書き出して、元の表示間隔とループ設定を引き継ぎます。逆にGIFがまったく持てないのはメタデータです。ICCプロファイルもEXIFも、8ビットを超える深度も仕様のどこにもないので、16ビットの原本もDisplay P3のタグも、パレットの話に入る前に消えています。

## FAQ

### アニメーションPNGはGIFにしても動きますか？

動きます。コマが複数あれば、元の表示間隔とループ設定を引き継いだアニメーションGIFを作ります。パレットはアニメーション全体で共通のものを1つ使い、各コマは変化した部分だけを書き出します。何コマ残したかは変換後の注記に出ます。

### PNGの透明な縁がGIFでギザギザになるのはなぜですか？

GIFの透明度は1ビットしかなく、各画素は完全に見えるか完全に消えるかのどちらかになるためです。アルファは中間値で二値化され、半端に透けていた画素は先に背景色と合成されるので、滑らかだった輪郭が階段状に変わります。

### 写真に256色で足りますか？

ほとんど足りません。一般的な写真はパレットに収まらない数の色を使うので、グラデーションに帯が出て、ディザがその帯を目に見える点の模様で覆います。圧縮設定ではなく明確な品質低下なので、GIFしか通らない相手に渡すときだけ選んでください。

### 画像はどこかにアップロードされますか？

いいえ。変換はcanvas APIとWeb Workerを使ってブラウザ内で行われ、ファイルがデバイスから外に出ることはありません。アップロード工程も待ち行列もなく、ファイルサイズの制限もお使いのマシンのメモリ以外にはありません。

### 変換後の画像にEXIFメタデータは残りますか？

いいえ — そしてそれは意図した機能です。canvas経由の再エンコードは、GPS位置情報、カメラの機種、タイムスタンプ、カラープロファイルといったすべてのメタデータを除去します。出力に含まれるのはピクセルだけで、画像を公開共有する前に望ましい状態になっています。

### 多くの画像を一度に変換できますか？

はい。何枚でもファイルをドロップまたは貼り付けてください。それぞれがバックグラウンドで変換され、個別の進捗とダウンロードボタンが付きます。すべてを.zipアーカイブとして一括ダウンロードすることもできます。

### 変換すると画質は落ちますか？

変換先によります。このコンバーターは、どの形式の組み合わせでも常に生のピクセルにデコードしてから再エンコードします。メタデータが除去されるのも同じ仕組みによるものです。ロスレスの変換先（PNG、および256色の範囲内のGIF）ではデコードしたピクセルと完全に同一のまま保たれ、JPEG・WebP・AVIFでは品質スライダーでトレードオフを調整できます。すでに非可逆の画像を変換すると、劣化がもう一世代ぶん重なります。
