abox.tools

語言: 繁體中文

手機存下的那張照片,和那個什麼都打不開的格式

iPhone 把照片存成 HEIC,它比 JPEG 更小也更好,而大量軟體至今拒絕開啟它。這一頁講這個格式究竟是什麼,轉換要拿畫質換多少,以及為什麼幾乎每一個轉換器都要你先把照片傳上去。

開啟HEIC 轉 JPG iPhone 拍的照片,換成什麼都打得開的格式。

以 Markdown 檢視

先說結論

開啟 HEIC 轉 JPG,把照片丟進去,按「轉換」。品質滑塊別動,「保留日期、相機和引數」也保持勾著,除非你有理由不留。出來的就是 JPEG,一張一個下載按鈕,多了就給你一個 zip。

整個過程什麼都不上傳。在這件事上這算少見,而為什麼少見,正是這一頁裡有意思的那一半。

選項卡片:格式選單選在 JPEG,品質滑塊在 85,還有一個開關決定是否保留原檔案的日期、相機和位置。
整個轉換就這三項。值得停一停的是後設資料那個開關,下面一節說明了原因。

HEIC 到底是什麼

HEIC 其實不算 JPEG 那種意義上的圖片格式。它是個容器,跟 MP4 是同一套盒式結構,裡面裝著一幀 HEVC 影片。HEVC 也叫 H.265,就是接替你那臺老攝像機那套編碼的東西,而且相當能打:同樣畫質下,一張 HEIC 的 iPhone 照片大約只有 JPEG 的一半大。

蘋果從 2017 年的 iOS 11 起換用它,並設成預設。也就是說,除非有人專門去設定裡選過「最相容」,否則這將近十年裡那部手機拍的每一張照片,都在用一個這樣的格式:

照片本身沒毛病,它比同一張的 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 是兩種編碼,中間不存在一條不用把畫面解開再編回去的路,而後面這一編是有損的。實際上這件事遠沒有聽起來那麼要緊:

一點損失都不想要的話,格式選單裡還有 PNG。做好心理準備:一張照片存成 PNG,通常是 JPEG 的五到十倍大,因為 PNG 那套壓縮是為大片純色和線稿設計的,不是為草地和皮膚。

日期、相機和座標

大家抱怨 HEIC 轉換器,抱怨得最多的就是照片轉回來丟了拍攝日期,於是一整趟假期的照片全按今天的日期沉到相簿最底下。這是因為,經由畫布轉換出來的只有畫素,別的什麼都沒有,畫布不帶任何標籤。所以除非轉換器專門去把後設資料另取一遍,否則它就是沒了。

這裡的工具會把 EXIF 塊從 HEIC 裡抄出來,寫進 JPEG,日期因此保住。頁面上有個勾選框,預設勾著。取消勾選,出來的 JPEG 裡就只剩畫面。

決定之前,先看看那份列表:每張照片那一行都寫明檔案裡有沒有 GPS 座標,而且是在你轉任何東西之前就寫明。照片要發去公開場合,那一行就是該讀的。照片只是進你自己的相簿,那留著後設資料幾乎肯定才是你要的。

不管你怎麼選,有一個標籤一定會被改,而為什麼改值得知道。HEIC 把旋轉記在兩個地方:容器裡一份,EXIF 塊裡一份。解碼器在解碼時已經把容器那份旋轉應用上了,所以交出來的畫素本來就是正的。這時候 EXIF 要是還說「把這張轉 90 度」,看圖軟體就會再轉一次,每一張直幅構圖都得躺下。所以方向標籤被設成正立,其餘的一律按手機原來寫的樣子抄過去。

你要是想逐條細看那些標籤,或者把已經是 JPEG 的照片裡的標籤清掉,那是另一件事,另有一篇指南。

容易踩的幾個坑

怎麼判斷一個轉換器是不是在上傳

這套辦法對任何工具都管用,不只這一個,花不了十五秒。

  1. 開啟頁面,再開啟瀏覽器的開發者工具,切到「網路」面板。
  2. 轉一張照片,盯著看。在你機器上解碼的工具,那一刻一條請求都不會發。上傳的工具會發一條,大小跟你照片差不多,而那個大小你看得見。
  3. 或者更省事:把頁面開一次,斷開網路,再試著轉點什麼。把照片送出去解碼的工具,這時候就不動了;內建解碼器的那個不會。

這裡的轉換器就是照著這兩條檢查造的,這套道理更長的版本在把檔案傳給線上轉換器安全嗎裡。