EXIF(位置情報)を安全に消す方法と自動回転の完全ガイド
共有前にEXIFを削除し、向きは実回転で保存——これだけで大半の事故は防げます。 /exif-strip に写真を投げると、GPSや端末情報は消え、6/8/3 などの Orientation 指定もピクセルを回して統一できます(ブラウザ内処理)。
関連:色と形式の最短ルール
HEIC/HEIFの持ち込みは HEICのWeb最適化、sRGBへの正規化は sRGB変換ガイド を参照。
要点(TL;DR)
- 共有・提出前はEXIF削除、向きは実回転で保存。
- 写真=WebP 80–85(互換はJPEG 85)/ロゴ・UI=PNG/WebP Lossless。
- 公開前に /compare で1:1確認(向き・見え方・容量)。
1. EXIFの中身と危険性
- 位置情報(GPS 緯度経度・高度・撮影時刻)
- 端末情報(機種名・OS・カメラ設定・シリアルの類)
- Orientation(向きフラグ)/サムネイル/撮影アプリ情報 など
特にGPSは個人情報に直結します。外部共有前に必ず削除しましょう。
2. Orientation と“実回転”の違い
Orientation は「向きフラグ」を示すだけで、ピクセルは回りません。アプリ依存で見えが崩れるため、 公開用はピクセルを回して保存(実回転)し、フラグは「未使用」にするのが安全です。
Orientation値 | 意味 |
---|---|
1 | 通常(0°) |
6 | 右回転 90°(時計回り) |
8 | 左回転 90°(反時計回り) |
3 | 180° 回転 |
3. 最短フロー(当サイトの /exif-strip を使う)
- /exif-strip を開く(ブラウザ内処理/サーバ保存なし)。
- 写真をドラッグ&ドロップ → Orientation を検出して実回転 → EXIF を除去。
- 用途に応じて保存:写真=WebP 80–85(互換にJPEG 85)、ロゴ/図=PNGまたはWebP Lossless。
4. CLI/コードレシピ(実回転+EXIF削除)
A. ImageMagick
# JPEG: EXIF方向に従って実回転し、EXIFを除去(sRGB統一) magick input.jpg -auto-orient -strip -colorspace sRGB -quality 85 output.jpg # PNG: メタを除去(必要に応じて)※方向は通常PNGで問題になりにくい magick input.png -strip output.png
B. Sharp(Node.js)
import sharp from "sharp"; const src = sharp("input.jpg", { unlimited: true }) .rotate() // EXIF Orientationを適用して実回転 .withMetadata({ orientation: 1 }) // 正規化(フラグを消す方向) .toColourspace("srgb"); // sRGBへ await src.webp({ quality: 82, effort: 5 }).toFile("out.webp"); // 写真 await src.png({ compressionLevel: 9 }).toFile("out.png"); // ロゴ/図
C. exiftool(メタ除去のみ)
※ exiftool はピクセルを回さないため、実回転は ImageMagick/Sharp 側で行います。
# すべてのメタを削除(元ファイルを上書き) exiftool -overwrite_original -all= input.jpg # ICCを保持したい場合は sRGBに変換してから-strip するのが安全(上のImageMagick例を推奨)
5. よくある落とし穴
- フラグだけリセットして実回転しない → 一部アプリで横向き表示。必ずピクセルを回す。
- メタの取り残し(XMP/サムネ) →
-strip
または-all=
を適用し直す。 - ICC削除で色ズレ → 先にsRGBへ変換してから
-strip
が安全。 - Live Photo(動画成分) → 静止画フレームのみ抽出して扱う(詳細: HEIC最適化)。
6. 公開前チェック(10項目)
- GPS/端末情報が残っていない(サンプルを exiftool で検査)。
- Orientation フラグなし、実回転済み。
- sRGBで色管理を統一(ICC問題なし)。
- 写真=WebP 80–85/互換JPEG 85、ロゴ/図=PNG or WebP Lossless。
- CLSゼロ:
width/height
明示、広告はプレースホルダで高さ確保。 - 配信は
srcset/sizes
が実表示幅に一致。 - Before/After を /compare で1:1確認(向き・画質・容量)。
- 個人情報(顔/ナンバー等)の必要十分なマスキング。
- キャッシュ更新は指紋(v2等)で担保。
- 本番RUMでLCP/INP/CLSに悪化がない。
7. まとめ:EXIF削除 × 実回転が最短解
まずは /exif-strip で一括処理。必要に応じて CLI で自動化し、配信は sRGB 統一+適切な形式に。これが“速く・崩れず・安全”な最短ルートです。