画像を軽くしたい理由は、たいてい外部から決められています。フォームの添付上限が2MBまで、記事の表示速度を上げたい、メールで送れる大きさに収めたい。つまり必要なのは「なんとなく小さく」ではなく「この数字以下に収める」ことで、しかも見た目が壊れない範囲で、という条件がつきます。
OFFilerの画像圧縮は、品質を指定する方法と、目標サイズを指定して品質を自動で探す方法の両方を持っています。圧縮前後はスライダーで見比べられ、処理はすべてブラウザ内で行われます。以下では形式ごとに圧縮の仕組みが違うこと、その結果としてEXIFが消えること、複数枚をまとめて処理する方法を説明します。
形式によって圧縮の仕組みが違う
JPEGとWebPは品質を指定して再エンコードする
JPEGとWebPは、もともと「情報を捨てて小さくする」非可逆形式です。圧縮では画像を一度キャンバスに描き直し、指定した品質で同じ形式にエンコードし直します。品質70前後が、写真において劣化にほとんど気づかないままサイズが大きく落ちる領域です。
画素数は変えないので、画面上の大きさは変わりません。「表示に必要な大きさより明らかに画素数が多い」画像に対しては、品質を下げるよりリサイズで画素数そのものを減らす方が、画質あたりの削減効果ははるかに大きくなります。
PNGは色数を減らして小さくする
PNGは可逆形式なので、品質を下げるという操作が存在しません。そこで圧縮では、画像に使われている色を代表的な色の一覧(パレット)にまとめ、各画素を近い色に置き換えます。指定できるのは64色・128色・256色です。
この方式はスクリーンショット、ロゴ、イラスト、図表のように使用色が限られている画像で非常によく効き、見た目をほとんど変えずに大幅に縮みます。逆に、なめらかなグラデーションや写真をPNGで持っている場合は、色が段々に見える縞が出ることがあります。その場合はPNGのまま縮めようとせず、形式変換でJPEGやWebPにする方が適切です。
目標サイズを指定すると品質を自動で探す
「2MB以内」のような上限が決まっている場合は、目標サイズをキロバイトで指定できます。指定した値に収まる品質を自動的に探して圧縮するため、品質のつまみを何度も上下させて試す必要がありません。フォームの添付上限に合わせる用途ではこちらが確実です。
副作用と制限
圧縮するとEXIFは消える
圧縮はキャンバスに描き直してから出力するため、元の画像に付いていたEXIF(撮影日時、カメラ機種、GPSの位置情報)は結果に引き継がれません。位置情報を落としたいだけならこれで用は足りますが、圧縮したくない場合はEXIF削除を使ってください。逆に、撮影日時を残したい写真に圧縮をかけると情報が失われる点にも注意が必要です。
ICCプロファイルも同様に引き継がれないため、広い色域で撮影・作成した画像は色味がわずかに変わることがあります。
扱えるのはJPEG・PNG・WebPの3形式
圧縮の対象はJPEG・PNG・WebPです。HEICのようにブラウザが直接デコードできない形式は、先にHEIC変換でJPEGにしてから渡してください。1ファイルあたり50MBまでを想定しています。
まとめて処理する・前後でつなぐ
フォルダ1つぶんをまとめて圧縮する
複数の画像を一度に投入すると、同じ設定で順に圧縮し、結果を1つのZIPにまとめて受け取れます。ブログ用の写真を一括で軽くする、社内共有用にスクリーンショットをまとめて縮める、といった作業が1回で終わります。ZIPの生成もブラウザ内で行われるため、枚数が多くても外部に画像が出ることはありません。
PDFにする前に圧縮しておく
画像をPDFにまとめる場合、PDFは画像を再圧縮せずそのまま格納します。つまりPDFの重さは元画像の重さで決まります。先に圧縮してから画像→PDFに渡すと、提出しやすい大きさのPDFが一度で作れます。
仕様と制限
- 対応形式
- JPEG、PNG、WebP
- サイズ上限
- 1ファイルあたり50MB
- JPEG / WebP
- 指定した品質で再エンコード(画素数は変わらない)
- PNG
- 色数を64 / 128 / 256色に減らして再出力
- 目標サイズ指定
- キロバイトで指定すると品質を自動探索
- 失われる情報
- EXIF、ICCプロファイル
- 一括処理
- 複数画像対応。結果はZIPで出力
- 通信
- ファイルの送信なし。処理はすべてブラウザ内