By 37Design |

iPhone HEIC 照片和 WordPress:如何不用轉檔就上傳

2017 年以後賣的每一支 iPhone,預設都用 HEIC 格式拍照。而 2024 年以前建立的幾乎每一個 WordPress 網站,都會在上傳時拒絕 HEIC 檔案。這個落差是我做 WordPress 網站 15 年來,遇過最常引發混亂的格式問題。

2024 年底 WordPress 6.7 加入原生 HEIC 支援後情況有所改善。但「改善」和「解決」是兩回事。仍然有主機環境讓 HEIC 上傳悄悄失敗,仍然有外掛在這個格式上卡關,論壇上也充斥著相互矛盾的建議。

這裡分享的是我在數十個客戶網站上實際處理過後的心得。

HEIC 到底是什麼

HEIC(High Efficiency Image Container)使用 HEIF 影像格式搭配 H.265 壓縮。Apple 在 iOS 11 採用它,是因為在相同視覺品質下,檔案比 JPEG 小約 40~50%。一張 JPEG 要 6MB 的典型 iPhone 照片,換成 HEIC 大概只要 3MB。

這個尺寸差異在用行動網路上傳時很關鍵,對 WordPress 伺服器的儲存空間也有影響。檔案更小、品質一樣。格式本身沒有缺點。

缺點在於相容性。多年來,Apple 生態系之外幾乎沒有東西能打開 HEIC 檔案。Windows 在 2018 年加入支援;Android 在 2019 年。WordPress 一直到 2024 年底的 6.7 版才加入,而且還必須是伺服器上裝有合適影像處理函式庫的前提下。

HEIC 還比 JPEG 保留更豐富的中繼資料:10 位元而非 8 位元色深、不限於 sRGB 而是更廣的 Display P3 色域,以及 HDR 增益圖,讓現代螢幕能把高光表現得更有力。轉成 JPEG 後,這三樣全都會喪失。

為什麼 WordPress 預設會拒絕 HEIC?

在 WordPress 6.7 之前,把 .heic 檔案丟進媒體庫會跳出那個惡名昭彰的「抱歉,基於安全考量,不允許這個檔案類型」訊息。原因其實不是惡意軟體層級的安全問題,而是白名單。

WordPress 對每一個上傳都會透過 wp_check_filetype_and_ext() 進行驗證,把副檔名和 MIME 類型對照寫死在 get_allowed_mime_types() 中的清單。如果組合不在清單上,上傳就會在抵達媒體庫前被拒絕。所謂「安全」的說法之所以存在,是因為允許任意檔案類型可能讓攻擊者上傳偽裝成圖片的執行檔,但實務上這個過濾器只是一份嚴格的允許清單。

對 HEIC 來說,歷史上的問題有兩個。第一,image/heic 不在預設清單裡。第二,就算用過濾器強行加入,底層的 PHP 影像函式庫(GD 和 ImageMagick)在多數伺服器上也無法解碼這個格式。WordPress 是誠實的:拒絕一個系統處理不了的檔案才合理。WordPress 6.7 兩處都修了:把 image/heicimage/heif 加入允許清單,並教影像編輯器類別在 libheif 可用時把 HEIC 派發給 ImageMagick 處理。

WordPress 6.7 的 HEIC 支援:什麼變了

6.7 之前的解法不外乎兩種:上傳前把每張照片轉成 JPEG(很麻煩),或是在 functions.php 加段程式把 MIME 類型加入白名單(如果伺服器其實處理不了檔案,就會出問題)。我看過這兩種做法用微妙的方式毀掉網站:白名單做法會讓縮圖壞掉,手動轉檔則會悄悄丟掉中繼資料。

WordPress 6.7 把 HEIC 加進允許的檔案類型清單,並包含了從 HEIC 檔案產生縮圖的基本支援。如果伺服器的 ImageMagick 編譯時包含 HEIF 支援(或 GD 帶 libheif),WordPress 現在能原生處理 HEIC。

而那個「如果」很關鍵。

能用的環境

多數現代受管理主機商(Cloudways、Kinsta、新基礎建設上的 SiteGround)都有支援 HEIF 的 ImageMagick。如果您在這類主機上跑 WordPress 6.7 以上,HEIC 上傳應該直接就能用。

不能用的環境

跑在較舊基礎建設上的共享主機就看運氣了。許多低價主機跑的是不含 HEIF 支援的舊版 ImageMagick。上傳本身可能成功(檔案上到伺服器),但 WordPress 無法產生縮圖。結果就是媒體庫裡放著一個全尺寸的 HEIC 檔,到處都是壞掉的縮圖佔位符。

這時候不會有清楚的錯誤訊息。媒體庫只會以通用圖示取代預覽。我有客戶把這個情況回報為「我的照片上傳不上去」,但其實照片上傳得很順利,只是在後台看起來壞了。如果您想更深入了解一切都正常時媒體庫應該怎麼運作,請看我寫的 WordPress 媒體庫指南

主機商 HEIC 支援比較表

我花了一個週末,把同一個 iPhone HEIC 檔案在五家主要主機商上測試一遍,看哪幾家處理得乾淨、哪幾家會悄悄把縮圖弄壞。下表是 2026 年初的結果。

主機商 接受 HEIC 上傳 產生縮圖 ImageMagick + libheif 備註
Kinsta 有(ImageMagick 7 + libheif) 體驗最乾淨。AVIF 也能用。
Cloudways(Vultr/DO) 視堆疊版本而定。新版伺服器沒問題。
WP Engine 2024 年平台更新加入了原生 HEIC 支援。
SiteGround 部分 不一定 新方案能跑。舊共享環境縮圖會失敗。
Bluehost(共享) 無(舊版 ImageMagick) 上傳會完成但縮圖壞掉。建議事先轉檔。

規律很明顯:高階受管理 WordPress 主機商已經投入新一代影像函式庫,而低價共享主機仍在跑舊堆疊,對 HEIC 的支援頂多算是七零八落。如果您在 Bluehost 共享方案或類似價位的供應商,且 HEIC 對工作流程很重要,與其和伺服器糾纏,不如在上傳前先轉檔。

如何確認您的伺服器是否支援 HEIC

在 WordPress 後台前往工具 > 網站狀態 > 資訊 > 媒體處理。查看 ImageMagick 版本和支援的格式。如果清單中看到「HEIC」或「HEIF」,就沒問題。

如果沒看到,或者用的是 GD 而非 ImageMagick,HEIC 縮圖就無法產生。您有兩個選擇:請主機商升級 ImageMagick,或者在上傳前先轉檔。

「上傳前先轉檔」的陷阱

「先把 HEIC 轉成 JPEG 就好了啊」是 WordPress 論壇上最常見的建議。乍看挺合理。但如果您在意畫質,這也可能是您能做的最糟糕選擇之一,因為 iPhone 的預設轉檔路徑會以多數人沒注意到的方式造成劣化。

當您讓 iOS 自動把 HEIC 轉成 JPEG 時(給 Windows 的 AirDrop 路徑、Mail Drop 附件路徑、分享表單到大部分 App 的路徑),會發生這些事:

  • 色域壓縮。原始 HEIC 以 Display P3 儲存,這個色彩空間比 sRGB 大約多 25%。JPEG 匯出會被夾在 sRGB 內。飽和的紅、橙、綠會明顯被壓平。
  • 位元深度縮減。HEIC 保有 10 位元色彩(每通道 1024 階)。JPEG 鎖在 8 位元(256 階)。平滑的天空漸層在轉檔後可能會出現可見的色帶。
  • HDR 增益圖喪失。iOS 會在 SDR 像素資料旁嵌入 HDR 增益圖,讓相容螢幕能呈現更亮的高光。JPEG 沒有對應的東西。匯出時陰影和高光的細節會被壓爛。
  • EXIF 被剝除(有時)。視轉檔由哪個 App 執行而定,GPS 座標、鏡頭資訊和拍攝設定可能會被丟掉。如果您依賴中繼資料來整理或地理標記,批次轉檔前務必確認。
  • 檔案大小膨脹。HEIC 存在的全部理由就是壓縮。3MB 的 HEIC 在品質 85 的 JPEG 下通常會膨脹到 6~8MB,儲存空間使用量翻倍。

麻煩的是,這些劣化在縮圖尺寸下全部看不見。要等到有人放大、列印,或在廣色域螢幕上觀看時才會察覺。那時候已經來不及了,JPEG 就是您手上的檔案。

更聰明的做法是在發佈那一刻才轉檔,用一個能保留該保留的東西、只把 WordPress 真正需要平面化的部分平面化的工具。這也是任何值得用的專用上傳工具的設計原則。

iPhone 本身的轉檔問題

「上傳前把 HEIC 轉成 JPEG」聽起來簡單。在筆電上確實是。macOS 的預覽程式幾秒就能批次轉檔,Windows 的相片 App 也能搞定。

在 iPhone 上就是另一個故事。沒有內建的批次轉檔工具。您可以把相機設定改成用 JPEG 拍而不是 HEIC(設定 > 相機 > 格式 > 最相容),但那樣您拍的每張照片都會失去 40~50% 的檔案大小優勢,不只是要傳給 WordPress 的那些。

有些人會用捷徑 App 做一個 HEIC 轉 JPEG 的工具。可以用,但工作流程多了一道手動步驟,而且轉出來的檔案更大。等於把一個問題換成另一個問題。

真正令人煩躁的是,iPhone 在某些情境其實會自動處理這個轉檔。當您寄信附照片或把照片 AirDrop 給 Windows PC 時,iOS 會即時轉成 JPEG。但透過瀏覽器或 WordPress App 上傳時,它會送原本的 HEIC 檔案。沒有設定可以改變上傳時的這個行為。如果您經常一次從 iPhone 推 10~20 張到 WordPress,可以參考我那篇關於 從手機批次上傳圖片 的筆記,裡頭有能繞過 iOS 怪癖的技巧。

SnapPress 怎麼處理 HEIC

當我做 SnapPress 時,HEIC 處理是最早必須解決的事情之一。做法很直接:App 讀取您的原始 HEIC 檔案,在您的 iPhone 上本機轉成 JPEG,再把 JPEG 傳給 WordPress。

這代表它能在任何 WordPress 網站上運作,不管伺服器是怎麼設定的。您的主機不需要 ImageMagick 的 HEIF 支援,WordPress 也不必是 6.7 版。抵達伺服器的是一個標準 JPEG,從 1.0 版以來的所有 WordPress 安裝都能處理。

轉檔在裝置上發生,每張照片只要一瞬間。您不會看到,也不需要設定。選好照片、按上傳,您的媒體庫就會出現縮圖、預覽都正常的 JPEG。

這算「正確」的做法嗎?看您在意什麼。如果您要絕對最小的檔案大小,把原生 HEIC 上傳到支援的伺服器在技術上更好。如果您想要不用查伺服器設定就能在所有 WordPress 網站上跑的東西,自動轉檔比較穩。如果您想看看 SnapPress 在競品中的定位,可以看我那篇比較幾款 iOS App 的 WordPress 照片上傳 App 推薦

我選了可靠性而不是理論上的最佳化。依我的經驗,多數 WordPress 使用者根本不知道也不在乎自家主機跑的是哪一版 ImageMagick。他們只想看到照片好好顯示出來。

那 Jetpack 和 WordPress 官方行動 App 呢?

WordPress 官方行動 App(許多功能仰賴 Jetpack)多年來對 HEIC 的處理一直不太穩定。較新的版本確實會在上傳前把 HEIC 轉成 JPEG,做法和 SnapPress 類似,但這個轉檔走的是 Jetpack 的影像處理管線,意味著您必須有 Jetpack 連線和一個跟網站綁定的有效 WordPress.com 帳號。

如果您本來就在用 Jetpack,這沒問題。如果不是,就會很煩,因為 App 有時會在沒有連線的情況下乾脆拒絕上傳。我另外寫了一份 不用 Jetpack 上傳照片到 WordPress 給想要更精簡堆疊的讀者。簡而言之:如果 Jetpack 不在您的工作流程中,請改用直接呼叫 WordPress REST API 的第三方 App,整個跳過對 WordPress.com 的依賴。

您會遇到的另一個格式:HEIF 與 AVIF

HEIC 在技術上是包覆 HEIF 影像的容器格式。您有時會看到副檔名是 .heif 而不是 .heic 的檔案。WordPress 6.7 對兩者一視同仁。

AVIF 是在網路上勢頭漸增的較新格式(Netflix 和許多 CDN 用它做圖片傳遞)。WordPress 在 6.5 版加入了 AVIF 支援。一些較新的 iPhone 可以用 AVIF 拍攝,但還不是預設。

就目前而言,要上傳 iPhone 照片,99% 的情況您面對的還是 HEIC。但 AVIF 值得關注。它的壓縮率比 HEIC 還高,跨平台支援也更廣。

iPhone 16 上的 AVIF:接下來會發生什麼

iPhone 16 在 iOS 18 全系統都帶完整的 AVIF 支援:相片 App 能讀 AVIF 檔,Safari 直接內嵌渲染,分享表單也把它當成一等公民對待。相機仍然預設 HEIC,但渲染與解碼管線已經從頭到尾都認得 AVIF。

WordPress 那邊也準備好了。6.5 版在 2024 年 3 月把 image/avif 加入允許的 MIME 類型,6.7 又擴充了影像處理邏輯,讓 AVIF 檔案能產生正常的縮圖。如果您的伺服器有近期的 ImageMagick 加 libavif,整條管線無需設定就能跑。

AVIF 對發佈者為何重要:在感知品質相同的條件下,AVIF 比 HEIC 約小 20%,比 JPEG 約小 50%。它在所有現代瀏覽器(Chrome、Firefox、Safari、Edge)都能用,不像 HEIC 從來沒拿到普及的瀏覽器支援。而且拜 AV1 之賜,它免授權金,HEIC 卻坐在 HEVC 那一團糾結的專利授權之上。

實務上的差別:HEIC 是您在入口端要搏鬥的擷取格式,AVIF 是您在出口端送給訪客的傳遞格式。多數工作流程最後會落在這個樣貌:相機產出的 HEIC 原始檔 → 媒體庫裡的 JPEG 或 AVIF 中間檔 → 透過 CDN 或 ShortPixel 之類外掛送到瀏覽器的 AVIF。Apple 把相機預設換成 AVIF 不太可能在 ProRAW 與 Live Photos 完成遷移之前發生,那是個耗時數年的工程。現在先把進來的 HEIC 處理優化好,傳遞端的 AVIF 就交給 CDN 處理。

我的建議

如果主機支援 HEIC(用網站狀態確認),且您用的是 WordPress 6.7+,就直接上傳 HEIC 檔案吧。享受比較小的檔案大小帶來的好處。

如果主機不支援 HEIC,或者您管理多個分散在不同主機上的網站,不想一個個確認,就用會自動轉檔的工具。SnapPress 會自動處理這件事。SnapPress Connect 外掛負責網站連線,App 在背後處理格式轉換。

不要因為 WordPress 一次出包就把 iPhone 相機格式改回 JPEG。HEIC 是更好的格式。該調整的是上傳工具,不是您的相機設定。