JPG という形式の特徴
非可逆圧縮で、写真をいちばん小さくできます。透過は扱えません。保存を繰り返すたびに少しずつ劣化していきます。
どうやって「ちょうど」にしているか
SOI(FFD8)の直後に COM セグメント(コメント)を差し込んで容量を合わせています。COM は描画に影響しません。
そのため、容量を変えても見える画素は変わりません。アップロード上限・転送・保存の確認には最適ですが、画素数そのものに依存する処理(リサイズの負荷、メモリ上の展開サイズ)の確認には向かない点に注意してください。 画素数そのものが大きい画像が必要なら、4K・8K の実寸で作った画像テストパターンを使ってください。
容量ごとの目安
| 容量 | 現実の目安 | 実際に当たりやすい上限・設定 |
|---|---|---|
| 10 KB | アイコンや favicon 1 個、API のレスポンス 1 件、ログ数十行がだいたいこのくらいです。 | この容量で弾かれる設定はまずありません。上限まわりではなく、拡張子チェックや MIME 判定だけを切り分けたいときに向きます。 |
| 100 KB | Web に載せる写真 1 枚を圧縮したあとが、だいたいこの辺りに収まります。ページの HTML と CSS を合わせたサイズにも近い容量です。 | 画像アップロードの上限を 100KB に絞っているフォームはあり、その境界を試すのに使えます。転送量より、リサイズ処理そのものの確認が主目的になる容量です。 |
| 500 KB | スマートフォンの写真を Web 用に縮小した 1 枚ぶんです。画像アップロードの上限を 500KB に設定しているサービスもあります。 | アイコンやプロフィール画像の上限として 500KB を採る設計はよくあります。上限ちょうどを通すか弾くかは実装で割れます。 |
| 1 MB | メール添付でも軽い部類です。フォームの画像アップロード上限としてよく設定される値でもあります。 | nginx の client_max_body_size は既定が 1MB です。設定を変えていないリバースプロキシの後ろにアプリを置くと、ちょうどこの辺りから 413 Request Entity Too Large が返り始めます。 |
| 5 MB | スマートフォンで撮った写真をそのままアップロードすると、だいたいこのくらいになります。 | PHP の既定は upload_max_filesize が 2MB、post_max_size が 8MB です。5MB のファイルは前者だけを超えるので、「設定を 1 つ直したのにまだ通らない」という事故が起きやすい容量です。 |
| 10 MB | 添付ファイルの上限としてよく設定される値です。この辺りから転送時間とタイムアウトが現実の問題になります。 | アプリ側は受け付けても、前段のリバースプロキシやロードバランサが先に切ることがある容量です。413 がどの層から返っているのかを確かめるのに向きます。 |
| 25 MB | Gmail の添付上限として広く知られている値です。「25MB まで」と書かれた仕様で、ちょうど 25MB を含むのかどうかは実装で割れます。 | Gmail の添付上限が 25MB で、これを超えるとファイルは Google ドライブのリンクに置き換えられます。添付として送れる最後の容量帯です。 |
| 50 MB | 一般的なアップロード上限としては大きい部類で、分割アップロードを検討し始めるサイズです。 | GitHub は 50MB を超えるファイルをプッシュすると警告を出し、100MB を超えると拒否します。50MB はその警告がちょうど始まる容量です。 |
| 100 MB | GitHub が 1 ファイルに課している上限がちょうど 100MB です。この容量を単発で扱えるかどうかは、実装の作りがはっきり出ます。 | GitHub の 1 ファイル上限がちょうど 100MB で、これを超えるものは Git LFS に逃がす必要があります。HTTP でも一括読み込みが現実的でなくなる境目です。 |
コマンドで取得
curl -o sample-10mb.jpg https://naqto.com/api/dl/image/jpg/10mb/curl -o sample-62914560.jpg https://naqto.com/api/dl/custom/image/jpg/62914560/ほかの形式: PNG / GIF / WebP / アップロード上限を 1 バイト単位で確かめるなら 境界値のテストファイル