画像のファイルサイズを小さくする方法
アップロードフォームの上限が2 MBで、写真は8 MB。実際にどこをいじればいいの?
3つのレバーと、支配的な1つ
どの画像圧縮ツールも、3つのレバーを組み合わせて引いているにすぎません。画像のピクセル数、エンコーダーが捨ててよいディテールの量、そして書き出す形式です。多くの人がまず品質スライダーに手を伸ばすのは、どのツールでもそれが最初に目に入るからです。しかし、そこから始めるのはたいてい間違いです。
支配的なのは寸法です。ファイルサイズはおおよそピクセル数に比例し、ピクセル数は一辺の長さの2乗に比例するからです。幅と高さを半分にすれば、ピクセルは4分の1になります。品質スライダーでできることに、これほど決定的なものはありませんし、体感品質の犠牲がこれほど小さい手段も他にありません。ただし、結果が表示される枠より大きいままであることが条件です。
本当に必要なピクセル数を割り出す
最近のスマートフォンのカメラは、横幅4000ピクセル前後の画像を生成します。ノートPCで全画面表示される写真の幅はおおよそ1500〜2000ピクセル、記事の中に置かれた写真は800ピクセルで表示されることが多いものです。800ピクセルしか表示しない枠に4000ピクセルを送るということは、ダウンロードされたあとで約96パーセントのピクセルが閲覧側のソフトウェアによって捨てられるということです。
| 長辺 | おおよそのピクセル数 | 4000 px原寸に対する割合 |
|---|---|---|
| 4000 px | 1070万 | 100% |
| 2560 px | 440万 | 41% |
| 1920 px | 250万 | 23% |
| 1280 px | 110万 | 10% |
| 800 px | 40万 | 4% |
これらの割合は計算上の値であって、特定のファイルを実測したものではありません。圧縮済みのファイルは、ピクセル数にきっちり比例して小さくなるわけではないからです。それでも最初に見るべきはこの数字です。エンコーダーがディテールを捨て始める前に、リサイズがどれだけの余裕を与えているかが分かるからです。
品質スライダーがしていること
JPEGエンコーダーでは、品質の数値は各8×8ブロックの周波数係数に適用される除数のテーブルを一律に拡大縮小します。品質が低いほど除数は粗くなり、ゼロに丸められる係数が増え、必要なビット数が減ります。目に見える代償は、まず硬いエッジの周りと平坦なグラデーションに現れます。文字の脇に出るリンギングと、空に出るバンディングです。
この尺度は線形ではありませんし、形式をまたいで比較できるものでもありません。JPEGエンコーダーの品質80、WebPエンコーダーの品質80、AVIFエンコーダーの品質80は、たまたま同じ範囲を共有しているだけの無関係な3つの数値です。数値を信用するのではなく、等倍で表示して結果を目で判断してください。
目標サイズが設定ではなく探索である理由
「これを500 KBにしろ」という指示を受け付けるエンコーダーはありません。エンコーダーが受け取るのは品質設定であり、その設定でその画像を処理した結果として出てくるサイズを返すだけです。したがって目標サイズを指定できるツールは、内部で探索を行っています。エンコードし、測り、品質を調整し、もう一度エンコードし、結果が上限を下回るか品質の下限に達したところで止める、という手順です。
目標サイズが常にベストエフォートである理由はここにあります。細部が多くノイズを含む高解像度の写真は、人が許容できるどの品質でも厳しい上限に収まらないことがあります。そのとき誠実な対応は、写真が台無しになるまで続けることではなく、下限で止めてどこで止まったかを伝えることです。FileSlimmerの目標サイズ指定ツールは、まず寸法を縮小し、次に上下の範囲を狭めながら品質を探り、最終的に採用した設定を報告します。
写真を1 MB未満にする方法
まず、スマートフォンの写真を、送り先が必要とする最大の寸法までリサイズします。メール、フォーム、一般的なウェブページであれば、それはカメラの原寸よりはるかに小さいことがほとんどです。次に、最高ではないが高めの品質でJPEGかWebPを新たにエンコードし、結果を測り、それでも1 MBを超えている場合にだけ品質を少しずつ下げます。
結果が1 MBを下回るかどうかは品質だけでは決まりません。細部の多い画像は、単純な画像より多くのデータを必要とするからです。1回目で上限を超えたなら、品質をさらに下げる前に寸法を小さくしてください。ピクセルをすべて保ったままブロックノイズやリンギングを強く出すより、そのほうが自然な見た目を保てるのが普通です。
効果がないこと
- ZIPに入れる。圧縮済みの画像形式には、汎用の圧縮ツールが見つけられる冗長性がほとんど残っていません。書庫のサイズは、たいてい元のサイズと誤差の範囲でしか変わりません。
- 拡張子を変える。バイト列は変わりませんし、実際のファイルシグネチャを読むソフトウェアは単に混乱するだけです。
- 同じ品質でJPEGを保存し直す。これは2回目の非可逆圧縮です。ファイルは実質的に小さくならず、画像はわずかに劣化します。
- サイズだけが目的なら、写真からメタデータを削除する。数MBのピクセルに対して数KBのEXIFは誤差です。削除するのはプライバシーのためであって、これは正当な理由ですが、サイズのためではありません。
たいていうまくいく手順
- その画像が表示され得る最大のサイズを決め、長辺をその値までリサイズします。
- 内容に合った形式を選びます。写真には非可逆形式、スクリーンショットや平坦なグラフィックには可逆形式です。
- 最高ではないが高めの品質から始め、劣化が見えるところまで一段ずつ下げ、そこから一段だけ戻します。
- 結果を等倍で、実際に使う種類の画面で確認します。
- まだ大きすぎるなら、最初の手順に戻ります。余地は、ほぼ必ず品質よりも寸法のほうに残っています。
この方法が通用しなくなるところ
こうした手をすべてはねつける画像もあります。細かい文字が詰まったスキャン文書は、文字が読める状態を保つためにピクセルが必要なので、リサイズはただちに悪影響を与え、品質を落とせば文字を読みにくくする類のノイズがまさに現れます。表計算のスクリーンショットも同じ問題を抱えています。こうした画像では、正解はKB数を減らすことではなく、別の形式、つまり可逆形式かPDFであることが多いのです。
また、ポータルサイトにファイルを拒否されたら、その制限がファイルサイズに対するものか、ピクセル寸法に対するものかを確かめてください。この2つは別の制限であり、片方を通ったファイルがもう片方で弾かれることはあります。
この作業に使えるツール
出典
- ITU-T T.81 — quantisation and the JPEG quality scale
- MDN — Image file type and format guide
- MDN — Responsive images and choosing a display width