先說結論
開啟 HEIC 轉 JPG,把照片丟進去,按「轉換」。品質滑塊別動,「保留日期、相機和引數」也保持勾著,除非你有理由不留。出來的就是 JPEG,一張一個下載按鈕,多了就給你一個 zip。
整個過程什麼都不上傳。在這件事上這算少見,而為什麼少見,正是這一頁裡有意思的那一半。
HEIC 到底是什麼
HEIC 其實不算 JPEG 那種意義上的圖片格式。它是個容器,跟 MP4 是同一套盒式結構,裡面裝著一幀 HEVC 影片。HEVC 也叫 H.265,就是接替你那臺老攝像機那套編碼的東西,而且相當能打:同樣畫質下,一張 HEIC 的 iPhone 照片大約只有 JPEG 的一半大。
蘋果從 2017 年的 iOS 11 起換用它,並設成預設。也就是說,除非有人專門去設定裡選過「最相容」,否則這將近十年裡那部手機拍的每一張照片,都在用一個這樣的格式:
- Windows 不裝商店裡的擴充套件就預覽不了;
- 多數網頁上傳表單直接拒收;
- 大量老一點的桌面軟體壓根沒聽說過;
- 除了 Safari,沒有哪個瀏覽器顯示得出來。
照片本身沒毛病,它比同一張的 JPEG 還更好。只是它用的這門語言,世界上大部分地方沒學過。
為什麼只有 Safari 打得開
這一段能解釋你用過的每一個轉換器,所以值得單說。
解 HEVC 得有 HEVC 解碼器,而 HEVC 是有專利的。授權由不止一個專利池管,隨產品帶一個解碼器,就意味著得給人掏錢。瀏覽器的應付辦法是靠作業系統,在硬體本來就有授權解碼器的機器上,Chrome 能放 HEVC 影片,但那條路是為影片播放接通的,不是為靜態圖片。所以把一個 HEIC 交給 <img>,Chrome、Firefox 和 Edge 一律拒收,什麼作業系統上都一樣。
蘋果裝置上的 Safari 是例外,因為 macOS 和 iOS 手裡有解碼器,而 Safari 被允許去問它要。除此之外的地方,這張圖對瀏覽器來說就是解不開。
於是一個轉換器只剩兩條路可走,而在這兩條路之間怎麼選,就是這類工具的全部故事。
為什麼幾乎每個 HEIC 轉換器都要你上傳
第一條路:把解碼器放在伺服器上。照片傳上去,在一臺你從沒見過的機器上解碼,重編成 JPEG,再發回來。幾乎每一個「免費線上 HEIC 轉換器」都是這麼做的,這也正是它們都要你檔案的原因。這不是偷懶,瀏覽器確實沒法赤手空拳做這件事。
代價值得說得直白些。手機裡的照片是多數人擁有的最私密的檔案,而一張剛出 iPhone 的 HEIC,通常帶著精確到幾米的拍攝座標,外加精確到秒的日期和一個相機標識。把一整個資料夾傳給一個免費服務,等於把照片和這些一併交出去。之後會發生什麼,取決於一份你沒讀過的隱私政策、一臺你查不了的伺服器,還有一個不是你挑的司法轄區。
第二條路:把解碼器放在頁面上。這一個就是這麼做的。它內建一份編譯成 WebAssembly 的 libheif,由本站發出,大約 1.4 MB,下一次就有快取。你的瀏覽器在你自己的機器上、用你自己的硬體跑它,照片哪裡都不去。頁面開一次之後,你完全可以拔掉網線,它照常運作,而這是任何上傳型轉換器都做不到的,也是最省事的一條證明。
那 1.4 MB 就是全部代價。你要是在按流量計費的網路上,這確實是筆實實在在的開銷,也值得知道,所以頁面把它明說出來,而不是悄悄下下來。
轉換要拿畫面換多少
HEIC 和 JPEG 是兩種編碼,中間不存在一條不用把畫面解開再編回去的路,而後面這一編是有損的。實際上這件事遠沒有聽起來那麼要緊:
- 品質 92,也就是轉換器的起點,在任何正常觀看尺寸下,照片都非常難跟原圖區分開。你要找的是平滑漸變裡的差別,比如晴空,而通常你找不到。
- JPEG 會更大。一般大三分之一到一倍,因為 JPEG 是 1992 年的編碼,而 HEVC 不是。這就是那筆交易:檔案大一些,換什麼都打得開。
- 該避的是轉兩遍。每一次有損編碼都要花掉一點。從原始的 HEIC 轉,別從別人已經給你轉好的 JPEG 轉,而且只轉一次。
一點損失都不想要的話,格式選單裡還有 PNG。做好心理準備:一張照片存成 PNG,通常是 JPEG 的五到十倍大,因為 PNG 那套壓縮是為大片純色和線稿設計的,不是為草地和皮膚。
日期、相機和座標
大家抱怨 HEIC 轉換器,抱怨得最多的就是照片轉回來丟了拍攝日期,於是一整趟假期的照片全按今天的日期沉到相簿最底下。這是因為,經由畫布轉換出來的只有畫素,別的什麼都沒有,畫布不帶任何標籤。所以除非轉換器專門去把後設資料另取一遍,否則它就是沒了。
這裡的工具會把 EXIF 塊從 HEIC 裡抄出來,寫進 JPEG,日期因此保住。頁面上有個勾選框,預設勾著。取消勾選,出來的 JPEG 裡就只剩畫面。
決定之前,先看看那份列表:每張照片那一行都寫明檔案裡有沒有 GPS 座標,而且是在你轉任何東西之前就寫明。照片要發去公開場合,那一行就是該讀的。照片只是進你自己的相簿,那留著後設資料幾乎肯定才是你要的。
不管你怎麼選,有一個標籤一定會被改,而為什麼改值得知道。HEIC 把旋轉記在兩個地方:容器裡一份,EXIF 塊裡一份。解碼器在解碼時已經把容器那份旋轉應用上了,所以交出來的畫素本來就是正的。這時候 EXIF 要是還說「把這張轉 90 度」,看圖軟體就會再轉一次,每一張直幅構圖都得躺下。所以方向標籤被設成正立,其餘的一律按手機原來寫的樣子抄過去。
你要是想逐條細看那些標籤,或者把已經是 JPEG 的照片裡的標籤清掉,那是另一件事,另有一篇指南。
容易踩的幾個坑
- 名叫「.jpg」的 HEIC。極其常見:中途有什麼東西把它改了名,卻沒轉格式,所以它照樣打不開。丟進轉換器的每個檔案都按開頭那幾個位元組判斷,不看名字,所以這種檔案照樣能轉。也正因如此,一個真的是 JPEG 的檔案會被直接告知,而不是被轉成一份自己的副本。
- 一個檔案,好幾張畫面。連拍或者 Live Photo 可以裝不止一張靜態圖。裝幾張就轉幾張,多出來的按原檔名加編號。Live Photo 的影片那一半,是手機擱在 HEIC 旁邊的另一個檔案,不在這裡面,也就無從轉起。
- AVIF 不是 HEIC。這兩個長得像,同一種容器,裡面的編碼不同,但現在的瀏覽器都能原生開啟 AVIF,所以沒什麼可轉的,工具會直說,而不是裝作在運作。
- 從源頭上把問題掐掉。手機上:設定 → 相機 → 格式 → 最相容。從此新拍的都是 JPEG。它更佔儲存空間,也不會動到你已有的照片,但從此不用再做這件事了。
- 分享有時候本來就轉了。把照片隔空投送或者用郵件發給非蘋果裝置,往往過去的就是 JPEG,因為 iOS 在發出時順手轉了。一張照片要是仍舊以 HEIC 的樣子到了你手上,那說明它走的是沒轉的那條路。
怎麼判斷一個轉換器是不是在上傳
這套辦法對任何工具都管用,不只這一個,花不了十五秒。
- 開啟頁面,再開啟瀏覽器的開發者工具,切到「網路」面板。
- 轉一張照片,盯著看。在你機器上解碼的工具,那一刻一條請求都不會發。上傳的工具會發一條,大小跟你照片差不多,而那個大小你看得見。
- 或者更省事:把頁面開一次,斷開網路,再試著轉點什麼。把照片送出去解碼的工具,這時候就不動了;內建解碼器的那個不會。
這裡的轉換器就是照著這兩條檢查造的,這套道理更長的版本在把檔案傳給線上轉換器安全嗎裡。