
同事用 iPhone 拍了張現場照片發到群里我在 Windows 上雙擊打開系統提示需要安裝「HEIF 圖像擴展」。裝完能看了但傳到公司系統里又報格式不支持。這事兒隔一段時間就會遇到一次。iPhone 從 iOS 11 起默認就用這個格式拍照到現在快十年了兼容問題還是沒徹底解決。一、先分清兩件事容器和編碼大部分關于 HEIC 的困惑都源于把兩個概念混在了一起。HEIF 是容器格式High Efficiency Image File Format管的是文件怎么組織——一張圖、多張圖、縮略圖、深度圖、EXIF、編輯歷史都可以塞進同一個文件。它本身不規定圖像數據用什么方式壓縮。HEVC 是編碼格式High Efficiency Video Coding也叫 H.265管的是像素怎么壓。我們平時說的 .heic 文件絕大多數是「HEIF 容器 HEVC 編碼」這個組合。蘋果給它起的名字叫 HEIC字母 C 就是 Coding 那個 C。這個區分不是摳字眼。它直接解釋了后面所有的兼容性問題麻煩的不是容器是編碼。HEIF 容器只是個文件結構誰都能實現HEVC 編碼背后是一整套專利池這才是卡住所有人的地方。順帶一提HEIF 容器里也可以放 AV1 編碼的數據那種叫 AVIF——同一個容器家族換了個不帶專利包袱的編碼器所以 AVIF 在瀏覽器里的支持速度比 HEIC 快得多。二、為什么各個平臺支持得七零八落環境讀 HEIC說明iOS 11 / macOS High Sierra原生支持蘋果自己推的格式Windows 10/11需裝擴展「HEIF 圖像擴展」免費但依賴的「HEVC 視頻擴展」要收費Android9.0 起支持各廠商實現程度不一Safari 17原生支持Chrome / Firefox不支持至今沒有原生解碼大多數網站上傳不支持后端圖像庫要么沒編譯 HEVC要么不敢編Windows 那個坑最有代表性圖像擴展是免費的但它要調用 HEVC 解碼能力而「HEVC 視頻擴展」在微軟商店里標價幾塊錢。微軟不是想賺這幾塊錢是它得為每一份 HEVC 解碼器向專利池付授權費。 這就是問題的根源——HEVC 的專利授權是按份收費的而且授權方不止一家。MPEG LA、Access Advance、Velos Media 各管一攤還有一批專利持有者誰都沒加入單獨找你談。一個瀏覽器廠商要原生支持 HEIC得先把這些賬算清楚。 對比一下 AV1那是一幫公司組了個開放媒體聯盟專門搞出來的免專利費編碼所以 Chrome、Firefox 加 AVIF 支持的時候沒什么心理負擔。三、轉換的幾條路第一條用系統自帶的。 Mac 上預覽打開導出選 JPEG最省事。iPhone 上可以在「設置 → 相機 → 格式」里改成「兼容性最好」以后直接拍 JPG——代價是文件大一倍左右。已經拍好的照片通過「隔空投送」到 Mac 或者用微信發送時系統有時會自動轉 JPG但這個行為不穩定別指望。 Windows 裝了 HEIF 擴展之后畫圖打開另存為 JPG 也行就是批量處理很難受。第二條在線轉換工具。 搜出來一大堆大部分的工作方式是你把照片傳到它服務器它轉完給你下載。 這條路我個人不太用。手機相冊里的照片是最私人的東西之一傳到一個不知道誰在運營的服務器上刪沒刪、留沒留、有沒有被拿去訓練模型都沒法驗證。轉個格式而已不值得。第三條在瀏覽器本地轉。 這是這幾年才成立的方案。libheif 有 WebAssembly 版本把解碼器下載到瀏覽器里跑圖片本身一步都不用往外走。 判斷一個在線工具是不是真的本地處理有個很直接的辦法按 F12 打開 Network 面板轉一張圖看有沒有把圖片 POST 出去。真本地處理的話你只會看到 WASM 文件下載下來看不到圖片傳上去——這兩件事方向是相反的。四、轉成 JPG 會丟掉什么這一節很多轉換教程都不提但踩過一次就知道有多要命。 HEIC 不只是「一張壓得比較小的圖」它是個容器里面可能裝著好幾樣東西。轉成 JPG 的時候JPG 裝不下的部分會被直接丟掉而且沒有任何提示。 Live Photo 的動態部分。 iPhone 的實況照片實際是「一張 HEIC 一段 MOV 視頻」兩個文件靠元數據關聯。轉 JPG 只處理靜態那一張視頻部分不會跟過去。想留住動態效果得先在 iPhone 上把實況照片單獨存成視頻。人像照片里存著一張景深圖蘋果相冊的「調整景深」「換光效」全靠它。轉 JPG 之后這張深度圖沒了虛化效果被永久烤進像素里再也調不回來。 HDR 增益圖。 較新的 iPhone 拍的照片帶一張增益圖在支持 HDR 的屏幕上能顯示出更高的動態范圍。轉成普通 JPG 后只剩基礎圖層在 HDR 屏上看會覺得「發灰、沒那么亮了」。 多幀數據。 連拍、HDR 合成這類照片容器里可能存著多張圖轉換工具通常只取主圖。 EXIF 大多能保留但看工具實現。要特別留意方向信息orientation——如果工具解碼時沒按 EXIF 把圖轉正、又沒把 orientation 字段帶過去你會得到一張躺倒的照片。我自己那邊的處理是解碼后按 EXIF 的 orientation 先把像素轉正再編碼所以方向不會出問題但深度圖、增益圖和 Live Photo 的視頻部分保不住。這不是某個工具偷懶凡是走「解碼成像素 → 重新編碼」這條路的都保不住——目標格式里壓根沒有存放它們的地方。 所以一條實操建議重要的照片轉換之后別急著刪原圖。轉出來的 JPG 用于分發HEIC 原件自己留著。五、技術上最有意思的一點能讀寫不了我自己在做瀏覽器端的圖像處理HEIC 這塊折騰了不少時間結論是讀能做到純本地寫做不到。讀的路徑是通的。libheif 編譯成 WASM 大概幾百 KB按需加載解出來的像素直接進 canvas之后想轉 JPG 轉 WebP 都隨意。整個過程原圖不上傳。寫就是另一回事了兩個坎 第一個坎是專利。 前面說了HEVC 編碼授權是按份計費的。一個免費網頁工具用戶量上去之后這筆賬根本算不過來——而且授權方不止一家你還不知道到底該跟誰簽。 第二個坎是體積。 能用的 HEVC 編碼器比如 x265編譯成 WASM 之后體積很大為了一個使用頻率不高的輸出格式讓所有用戶先下載幾兆的編碼器這個成本收益完全不成正比。所以我這邊的處理是HEIC 讀走端側HEIC 寫走服務端界面上直接標出來是哪一種不藏著。這個取舍不好看但比假裝能做要誠實。 順便說一句絕大多數場景其實不需要寫 HEIC。你要 HEIC 干什么呢它的價值在于 iPhone 拍照時省空間而 iPhone 自己就會生成。反向把 JPG 轉成 HEIC除了滿足特定的歸檔要求日常幾乎用不上。六、幾條實操建議照片要發給別人、要上傳系統直接在 iPhone 設置里把格式改成「兼容性最好」一勞永逸省下所有后續折騰。存儲空間緊張的話再改回來。 已經拍了一堆 HEIC批量轉的話Mac 用「預覽」全選導出最快Windows 建議找個支持批量的工具別一張張畫圖另存。 涉及隱私的照片證件、票據、合同拍照優先選在瀏覽器里本地處理的工具轉完自己按 F12 驗一下有沒有上傳。這個驗證成本很低值得做一次。做開發的如果要在服務端處理 HEIC注意 ImageMagick 和 Pillow 默認都不帶 HEVC 支持得自己編譯或者裝 pyheif、libheif 相關的綁定而且要留意你所在地區的專利合規問題——這塊比技術實現本身麻煩。我做的那個瀏覽器端圖像工具叫做圖映https://imging.cn所有功能幾乎都是源于身邊同事和朋友反饋的痛點HEIC 讀取用的就是上面說的 libheif WASM 方案按需加載轉 JPG / WebP / PNG 全程在本地完成圖片不上傳HEIC 寫入受專利和體積限制走服務端界面會提前標明。地址https://imging.cn如果你也在做類似的事容器和編碼這兩個概念一定要先分清楚能省掉很多繞路。