By 37Design |

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

2017 年以後賣的每一支 iPhone 預設都用 HEIC 格式拍照。2024 年以前做的每一個 WordPress 網站都會拒絕 HEIC 檔案上傳。這個不相容的問題,比我 15 年來做 WordPress 網站遇到的任何格式問題都造成了更多困擾。

2024 年底 WordPress 6.7 加了原生 HEIC 支援,情況改善了。但「改善」跟「解決」不一樣。還是有些主機環境的 HEIC 上傳會無聲失敗、有些外掛消化不了這個格式,論壇上也還是充斥著互相矛盾的建議。

以下是我在數十個客戶網站上實際處理這個問題後學到的東西。

HEIC 到底是什麼

HEIC(High Efficiency Image Container)使用 H.265 壓縮的 HEIF 圖片格式。Apple 在 iOS 11 採用它,因為在相同畫質下,檔案大約比 JPEG 小 40-50%。一張用 JPEG 會是 6MB 的典型 iPhone 照片,用 HEIC 大約是 3MB。

這個大小差異在你用行動網路上傳時很重要,對 WordPress 伺服器的儲存空間也很重要。更小的檔案,一樣的品質。格式本身沒有缺點。

缺點是相容性。好幾年來,Apple 生態系之外幾乎沒有東西能開啟 HEIC 檔案。Windows 在 2018 年加了支援,Android 在 2019 年。WordPress 直到 2024 年底的 6.7 版才加入,而且還要看你的伺服器有沒有裝對的圖片處理函式庫。

WordPress 6.7 的 HEIC 支援:改了什麼

6.7 之前,上傳 .heic 檔到 WordPress 會得到一個籠統的錯誤:「抱歉,基於安全原因,不允許此檔案類型。」解決辦法不是在上傳前把每張照片轉成 JPEG(很煩),就是在 functions.php 加一段程式碼把 MIME 類型加入白名單(如果伺服器實際上不能處理這個檔案,就有風險)。

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

那個「如果」很關鍵。

可以用的地方

大多數現代化的管理式主機商(Cloudways、Kinsta、SiteGround 的新基礎架構)都有帶 HEIF 支援的 ImageMagick。如果你在這些主機上用 WordPress 6.7 或更新版本,HEIC 上傳應該直接就能用。

不行的地方

舊基礎架構上的共享主機就看運氣了。很多便宜的主機用的是不含 HEIF 支援的舊版 ImageMagick。上傳可能會成功(檔案到了伺服器),但 WordPress 沒辦法產生縮圖。結果就是媒體庫裡只有一個原始大小的 HEIC 檔案,到處都是壞掉的縮圖占位符。

發生這種情況時不會有清楚的錯誤訊息。媒體庫只會顯示一個通用圖示而不是預覽。我遇過客戶回報說「我的照片上傳不了」,其實照片傳上去了,只是在後台看起來壞掉了。

如何檢查你的伺服器是否支援 HEIC

在 WordPress 後台前往「工具 > 網站健康度 > 資訊 > 媒體處理」。找 ImageMagick 版本和支援的格式。如果清單裡有「HEIC」或「HEIF」,就沒問題。

如果沒有,或者你用的是 GD 而不是 ImageMagick,HEIC 縮圖就不會產生。你有兩個選擇:請主機商升級 ImageMagick,或者上傳前先轉檔。

轉檔的問題

上傳前把 HEIC 轉成 JPEG 聽起來很簡單。在筆電上確實是。macOS 的預覽程式幾秒就能批次轉換。Windows 上照片 App 也能處理。

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

有些人用捷徑 App 做一個 HEIC 轉 JPEG 的自動化。能用,但又多了一個手動步驟,而且轉出來的檔案更大。一個問題換成另一個問題而已。

真正令人惱火的是,你的 iPhone 在某些情況下已經會自動做這個轉換了。用 email 寄照片或 AirDrop 到 Windows 電腦時,iOS 會自動轉成 JPEG。但透過瀏覽器或 WordPress App 上傳時,它送出的是原始的 HEIC 檔案。沒有設定可以改變上傳時的這個行為。

SnapPress 怎麼處理 HEIC

我做 SnapPress 的時候,HEIC 處理是最先要搞定的事情之一。做法很直接:App 讀取你原始的 HEIC 檔案,在上傳前於 iPhone 本機轉成 JPEG,然後把 JPEG 送到 WordPress。

這表示不管伺服器怎麼設定,每個 WordPress 網站都能用。你的主機不需要 ImageMagick 的 HEIF 支援。WordPress 不需要是 6.7 版。到達伺服器的檔案是標準 JPEG,從 1.0 版開始每個 WordPress 安裝都能處理。

轉換在裝置上進行,每張照片只需要零點幾秒。你看不到也不用設定。選好照片,點上傳,JPEG 檔案就出現在媒體庫裡,縮圖、預覽全都正常運作。

這是「正確的」做法嗎?取決於你在意什麼。如果你要最小的檔案大小,上傳原生 HEIC 到支援它的伺服器技術上更好。如果你要不用檢查伺服器設定就能在每個 WordPress 網站都能用的東西,自動轉換是更安全的選擇。

我選了可靠性而不是理論上的最佳化。就我的經驗,大多數 WordPress 使用者不知道也不在乎他們主機跑的是什麼版本的 ImageMagick。他們只要照片出現就好。

你還會遇到的其他格式:HEIF 和 AVIF

HEIC 技術上是一個包裹 HEIF 圖片的容器格式。你有時候會看到副檔名是 .heif 而不是 .heic 的檔案。WordPress 6.7 對兩者的處理方式一樣。

AVIF 是一個更新的格式,在網路上越來越受歡迎(Netflix 和很多 CDN 用它來傳送圖片)。WordPress 在 6.5 版加了 AVIF 支援。一些新款 iPhone 可以用 AVIF 拍照,雖然還不是預設值。

目前,上傳 iPhone 照片的時候 99% 的情況你會碰到的是 HEIC。但留意 AVIF。它的壓縮比 HEIC 更好,跨平台支援也更廣。

我的建議

如果你的主機支援 HEIC(在網站健康度裡查看)而且用的是 WordPress 6.7 以上,直接上傳 HEIC 檔。享受更小的檔案大小。

如果你的主機不支援 HEIC,或者你管理多個不同主機上的網站不想一個一個查,用一個會幫你轉檔的工具。SnapPress 會自動處理。SnapPress Connect 外掛負責網站連線,App 負責在背景處理格式轉換。

不要因為 WordPress 給你出過一次問題就把 iPhone 的相機格式改成 JPEG。HEIC 是更好的格式。該適應的是上傳工具,不是你的相機設定。