為什麼我的照片是歪的?深入理解 EXIF 方向標記
理解 EXIF 八種方向值,排查旋轉與鏡像照片,並驗證瀏覽器重新編碼的副本;不承諾所有設備相容或無損修復。
先分清像素與顯示指令
照片可以把像素橫著儲存,再由軟體依 EXIF Orientation 指令正向顯示;也有檔案的像素本身已經正向排列。不要認為所有直式照片都要旋轉,也不要把所有歪斜都歸因於 EXIF:匯出錯誤或已寫入像素的旋轉,同樣可能造成問題。
排查的關鍵是確認:儲存的像素是什麼方向,檢視軟體又套用了什麼變換。刪除方向標記,不等於旋轉像素。
八種值各代表什麼?
下表描述從儲存像素到預期顯示的變換。對角線的角點以儲存影像為準,順時針依畫面上的方向理解。
| 值 | 顯示變換 |
|---|---|
| 1 | 不變換 |
| 2 | 左右鏡像 |
| 3 | 旋轉 180 度 |
| 4 | 上下鏡像 |
| 5 | 沿左上至右下的對角線轉置 |
| 6 | 順時針旋轉 90 度 |
| 7 | 沿右上至左下的對角線反射 |
| 8 | 順時針旋轉 270 度,即逆時針 90 度 |
5 至 8 會交換顯示寬高;2、4、5、7 包含鏡像,因此「看起來直立」不代表文字沒有左右反轉。可對照ExifTool 的方向值定義與 exifr 方向讀取介面。讀取器有時顯示說明文字,而非原始數字。
修改前的排查順序
- 保留原始檔,將工作副本放入EXIF 檢視器,在全部欄位中尋找 Orientation。
- 在發生問題的目標應用程式開啟同一檔案,以文字或不對稱物體判斷是否鏡像。
- 如果能取得儲存尺寸,也記錄顯示尺寸。寬高交換是線索,不是檔案損壞的證明。
- 回顧上一步操作:是否刪了標記、旋轉了像素,或被另一套軟體再次套用方向?
- 若標記缺漏或檢視器結果空白,不要猜一個方向值。用其他讀取器確認;檢視器不會呈現所有結構或解析錯誤。
以合成影像為例:儲存尺寸為 120×80,Orientation 為 6,則預期顯示為 80×120。只刪標記可能露出原本橫著的像素;先把像素轉正卻仍保留舊值 6,可能再旋轉一次。鏡像情境也有相同的「重複處理」風險。
兩種不同的修復思路
修正顯示指令: 支援方向欄位的外部中繼資料編輯器可以修改錯誤的 Orientation,而不主動重新編碼像素。但前提是已知道像素的正確解讀方式,且目標應用程式遵守標記。本站的JPEG EXIF 編輯器沒有 Orientation 控制項,不要用日期、描述或 GPS 欄位代替方向修復。
正規化顯示後的影像: 把正確的變換套用到影像資料,再刪除舊指令或一致地設為正常。一般影像編輯器匯出 JPEG 可能重新壓縮;專門的 JPEG 無損變換也有自身限制,不能把「旋轉」一概當作無損操作。
瀏覽器移除器實際做了什麼?
EXIF 移除器透過瀏覽器影像解碼器載入檔案,依解碼後的自然尺寸繪製到 canvas,再輸出新檔。方向處理依賴瀏覽器解碼器,沒有獨立的「自動定向」開關,也沒有自行實作的八種方向變換流程。
專案記錄的合成案例已檢查顯示方向保持,包括一個 Orientation 為 6 的 JPEG 冒煙測試。這不是對所有瀏覽器、作業系統、格式或真實相機檔案的保證。合成中繼資料實驗室用於已知輸入的對照,不是全平台相容認證。
重新編碼也有代價:JPEG、WebP 即使選最高品質,仍可能有有損壓縮變化。PNG 編碼無損,但瀏覽器解碼與色彩轉換不保證來源像素完全一致。HTML canvas 序列化規範描述的是產生新的點陣圖檔案,而非原地修改中繼資料。
下載後再次驗證
重新開啟下載檔案,不要只相信處理預覽。檢查方向欄位、正向顯示、文字鏡像、尺寸與顏色,並在原先出錯的目標應用程式再試一次。若像素本身仍然歪斜,標記正常或沒有標記都不能說明修復成功。
照片轉正也不代表隱私安全,分享前仍應檢查 GPS 與身分線索。繼續閱讀EXIF 欄位判讀及PNG 與 JPEG 中繼資料比較,再選擇清理流程。
相關文章
方向標記 · exif · 疑難解答