這個頁面的程式碼沒跑起來。

直接從資料夾裡開啟 index.html,瀏覽器會攔下 JavaScript 模組,於是你選好照片之後,頁面不會有任何反應。改用 http 把這個資料夾提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然後開啟 http://localhost:8080/。

HEIC 轉 JPG 轉換 iPhone 照片

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

語言: 繁體中文
檢視原始碼
你的照片不會上傳。這裡根本沒有伺服器。

解碼這一步,在你自己的瀏覽器裡、用你自己的硬體完成。HEIC 是瀏覽器唯一打不開的圖片格式,所以這個頁面把解碼器一併帶上了,大約 1.4 MB,從本站發出,第一次訪問之後就有快取。別的 HEIC 轉換器為什麼個個要你上傳?因為它們把編解碼器放在伺服器上,照片只能送過去。這個頁面把編解碼器放在了這邊。頁面上根本沒有聯網功能,另一頭也沒有伺服器能接住照片。

即時檢查: 檢查中…

離線: 檢查中…

別信我們嘴上說的。開啟開發者工具,盯著「網路」面板,轉一張照片試試。你會看到頁面自己的檔案在載入,解碼器也在裡頭,但沒有一條請求帶著照片、縮圖、檔名,或者你選中內容裡的任何一個位元組。嫌麻煩就把頁面開一次,拔掉網線,照樣能把一整個資料夾轉完。

1 選好你的 HEIC 照片

手機裡直接複製的、備份裡翻出來的、儲存卡上拿的,都行。檔案就在這臺機器上讀,畫面也在這裡解碼。這個頁面沒有上傳這一步,背後也沒有伺服器。

2 想要什麼樣的結果

保留日期、相機和引數 按手機寫的樣子原樣複製過去,所以轉換後的照片還是按拍攝那天排序,不是按轉換那天。照片帶 GPS 座標的話,座標也一起帶上,上面那份列表寫明瞭你的哪幾張帶著。關掉它,出來的 JPEG 裡只剩畫面。

選哪邊都一樣,這裡沒有任何東西會被讀給誰聽。這個選擇管的是你拿回去的檔案裡裝什麼,不是這個頁面拿它做什麼。想逐條細看那些標籤,或者把已經是 JPEG 的照片裡的標籤清掉,那是 EXIF 檢視與清除做的事。

格式
92

照片裡的那些資訊

3 轉換

以 Markdown 檢視

HEIC 照片怎麼轉成 JPG

  1. 選好你的 HEIC 照片。拖到下面的方框裡,或者點開自己挑,直接從手機備份、桌面資料夾裡選都行。瀏覽器直接從你的硬碟上讀,這期間沒有東西發出去。列表會寫明每一張是什麼,裡面有些什麼。
  2. 看看這些照片都帶著什麼。每一行寫出拍攝日期、相機型號,還有這個檔案裡有沒有 GPS 座標,最後這項用綠色標出來,因為它才是值得留神的。這些不用解碼畫面,直接從容器裡讀,所以不花什麼代價,也立刻就有。
  3. 選格式,再定那些細節。沒有特別理由就選 JPEG。轉換圖的本來就是到哪裡都打得開。品質滑塊停在 92,這一檔上照片很難跟原圖區分開。那個勾選框決定日期、相機和位置要不要一起帶過去。
  4. 按「轉換」,然後下載。解碼器在第一次轉換時到位,大約 1.4 MB,只這一次。之後每張照片都在你自己的機器上解碼、寫出。一個檔案給你一個下載按鈕,多個檔案另外給你一個 zip。

說得更細的版本

手機存下的那張照片,和那個什麼都打不開的格式 iPhone 把照片存成 HEIC,而半個網際網路打不開它。這個格式是什麼,為什麼只有 Safari 解得了,轉換要拿畫質換多少,以及怎麼做到不把照片交給任何人。

常見問題

我的照片會傳到什麼地方去嗎?

不會。讀取、解碼、寫出,全由你自己的瀏覽器在你自己的硬體上完成。這個工具沒有任何聯網功能,不取東西,也不發東西。頁面的 Content-Security-Policy 把它可能聯的地址全列了出來,沒有一個是本站的。確實會載入的只有解碼器,它來自本站,只載入一次,而且發生在你的照片被牽扯進來之前。

為什麼第一次開啟要下載 1.4 MB?

因為 HEIC 是瀏覽器唯一打不開的圖片格式。它是裝在盒式容器裡的一幀 HEVC,只有蘋果裝置上的 Safari 有解碼器,Chrome、Firefox 和 Edge 乾脆不認這個檔案。所以 HEIC 轉換器總得從某處弄個解碼器來,能放的地方只有兩個,伺服器或者這個頁面。別人都選了伺服器,這就是它們個個要你上傳照片的原因。這一個改成內建一份編譯成 WebAssembly 的 libheif。它從本站發出,第一次訪問之後就有快取。你的照片哪裡也不去,代價就是這 1.4 MB,僅此而已。

轉出來的 JPEG 還保留拍攝日期、相機和位置嗎?

你要它留就留,頁面上有個勾選框。開著的時候,EXIF 塊從 HEIC 裡原樣複製出來,按手機寫的樣子寫進 JPEG,所以轉換後的照片仍然按拍攝那天排序,而不是按轉換那天。大家抱怨 HEIC 轉換器的,正是這一點。只有一個標籤會改,就是方向。它被設成「正立」,因為旋轉已經作用在畫素上了,看圖軟體要是再轉一次,每一張直幅構圖都得躺下。把勾選框關掉,出來的 JPEG 裡只剩畫面。

它會去掉 GPS 座標嗎?

它先告訴你座標在那裡,然後照你說的辦。還沒開始轉,每張照片那一行就已經寫明檔案裡有沒有座標,這一步比手機做得多。取消勾選「保留日期、相機和引數」,座標跟別的一切一起被擋在 JPEG 之外;勾著,它們就跟過去。想逐條細看那些標籤,或者把已經是 JPEG 的照片裡的標籤清掉,那是 EXIF 檢視與清除做的事,而且它不重新壓縮畫面。

畫面會重新壓縮嗎?

會,而且非壓不可。HEIC 和 JPEG 是兩種編碼,從一種到另一種,只能把畫面解開再編一遍。你能拿捏的是這一下的代價有多大。品質滑塊預設 92,這一檔上照片非常難跟原圖區分開。要是一點損失都不想要,又不介意檔案大上五到十倍,選單裡還有 PNG。

檔名叫 .jpg,其實是 HEIC,怎麼辦?

照樣能用。拖進來的檔案按開頭那幾個位元組判斷,不按名字。名字取決於最後碰過它的那個應用怎麼叫它,而一個名叫「.jpg」的 HEIC,正是大家跑來找這類工具的常見原因之一。真的是 JPEG 或者 PNG 的檔案會被擋下來,並告訴你它其實是什麼,不會被轉成一份自己的副本。

Live Photo 或者連拍能轉嗎?

裡面的靜態畫面能轉。一個 HEIC 可以裝不止一張畫面,裝幾張就轉幾張,按原檔名加編號命名。Live Photo 的影片那一半,是手機擱在 HEIC 旁邊的另一個檔案,不在這裡,也就無從轉起。深度圖和縮圖在容器裡,但不是誰想要的畫面,原樣留著不動。

為什麼它不收我的 AVIF?

因為沒什麼可做的。AVIF 和 HEIC 是同一種容器,只是裡面裝的是 AV1 而不是 HEVC,現在的瀏覽器個個都能原生解碼。為它多下載 1 MB 的引擎,是在解決一個你根本沒有的問題。真要把 AVIF 變成 JPEG,圖片壓縮和圖片縮放都能用瀏覽器內建的解碼器讀 AVIF、寫 JPEG。

免費嗎?要註冊嗎?

免費,沒有帳號,不用登入,沒有試用期,也沒有水印。檔案的數量和大小同樣沒有上限,因為沒有哪臺伺服器在為它們掏錢,工作是在你自己的機器上乾的。本站帶廣告,經費就是這麼來的,廣告拿不到關於你照片的任何資訊。

斷網能用嗎?

能,連解碼器一起。頁面開一次之後斷網,它照樣處理你的照片,跟之前沒有區別。這也是「什麼都沒上傳」最有分量的證明。一個把 HEIC 送出去解碼的轉換器,拔線那一刻就停了,這一個不會。