kelvinct
017 · HEIC 轉 PNG

你的 HEIC 照片沒東西打得開?

iPhone 把照片存成 .HEIC,但網路上有一半的地方到現在還是打不開。把它們丟進來,換回原尺寸的 PNG,一次幾張都行。解碼器就跑在這個頁面裡——照片不會被上傳,EXIF 與 GPS 標籤也會留在原地。

為什麼 .HEIC 到處都打不開?

從 iOS 11 開始,iPhone 拍出來的照片就是 HEIC:一格 HEVC 影片(也就是俗稱的 H.265)的靜態畫面,裝在 Apple 的容器裡。它確實比 JPEG 好——同樣畫質大約只要一半的檔案大小,還支援真正的透明度和 10 位元色彩——但 HEVC 被專利池綁著,解碼器要付授權費,所以 Windows、比較舊的 Android,還有一大堆網頁服務乾脆就沒有內建。檔案本身沒問題,是你拿來開它的東西讀不懂。

這個頁面自己帶了一套解碼器:編譯成 WebAssembly 的 libheif,就在這個分頁裡跑。它讀出照片、套用容器指定的旋轉方向,再把像素交給 canvas 寫成 PNG——一個從來沒有人拒絕過的格式。多張影像的檔案(連拍,或 Apple 在 Live Photo 旁邊附的靜態畫面)會依序編號輸出。

轉檔路上會弄丟什麼

PNG 是無損的,所以沒有任何一個像素被丟掉——只是檔案會大很多,因為 HEIC 靠的就是壓縮,而 PNG 不壓。真正被拿掉的是中繼資料:拍攝時間、相機設定,還有你當時站的那個位置的 GPS 座標。這通常正是重點。如果你需要保留那些標籤,這個工具就不對了。

10 位元色彩的 HEIC 會被壓成 canvas 能容納的每通道 8 位元。一般照片你看不出來;大片漸層的夕陽就有可能。

沒有任何東西離開這個頁面

沒有上傳,也沒有伺服器。解碼器是 1.9 MB 的 WebAssembly,在你第一次丟檔案時才從本站抓下來;在那之後所有事情——解碼、縮圖、PNG 編碼,連 ZIP 打包——都發生在你自己的瀏覽器裡。轉檔的時候打開開發者工具看 Network 分頁:這個頁面唯一發出的請求,是一個只記錄網址 /heic/ 的瀏覽計數,其他什麼都沒有。你的照片不在裡面。