# HEIC 轉 JPG 轉換 iPhone 照片

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

> 在瀏覽器裡把 iPhone 的 HEIC 照片轉成 JPG。解碼器跑在你自己的機器上，不上傳，不註冊，斷網也能用，拍攝日期和相機資訊可以一起帶過去。

本頁是一個完全在你的瀏覽器裡執行的互動式工具，地址是 https://abox.tools/zh-TW/heic-to-jpg/。你交給它的任何內容都不會被上傳。下面是這個頁面用文字對該工具的全部說明；要使用它，請開啟這個地址。

## 你的照片**不會上傳**。這裡根本沒有伺服器。

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

- ✗ 不上傳
- ✗ 不註冊
- ✗ 不限大小
- ✓ 斷網能用
- ✓ 開源

## HEIC 照片怎麼轉成 JPG

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

## 說得更細的版本

[手機存下的那張照片，和那個什麼都打不開的格式](https://abox.tools/zh-TW/guides/convert-heic-to-jpg/): iPhone 把照片存成 HEIC，而半個網際網路打不開它。這個格式是什麼，為什麼只有 Safari 解得了，轉換要拿畫質換多少，以及怎麼做到不把照片交給任何人。

## 工具箱裡還有

- [證件照製作](https://abox.tools/zh-TW/id-photo/): 選好國家，它就照那個國家的規定，一字不差地辦。
- [圖片堆疊](https://abox.tools/zh-TW/stack-images/): 二十張變一張，不用傳二十次，也不用 RAW 轉換器。
- [圖片塗黑與打碼](https://abox.tools/zh-TW/redact-image/): 你遮住的那塊是從檔案裡刪掉的，不是藏在檔案裡。
- [EXIF 檢視與清除](https://abox.tools/zh-TW/exif-editor/): 看看一張照片把你交代了多少，然後刪掉。

## 常見問題

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

不會。讀取、解碼、寫出，全由你自己的瀏覽器在你自己的硬體上完成。這個工具沒有任何聯網功能，不取東西，也不發東西。頁面的 `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 檢視與清除](https://abox.tools/zh-TW/exif-editor/)做的事，而且它不重新壓縮畫面。

### 畫面會重新壓縮嗎？

會，而且非壓不可。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，[圖片壓縮](https://abox.tools/zh-TW/compress-image/)和[圖片縮放](https://abox.tools/zh-TW/resize-image/)都能用瀏覽器內建的解碼器讀 AVIF、寫 JPEG。

### 免費嗎？要註冊嗎？

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

### 斷網能用嗎？

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

## 這條隱私承諾怎麼核實

- **你的照片沒地方可去。** Content-Security-Policy 把這個頁面允許聯的地址全列了出來，沒有一個是本站的。這裡沒有能收檔案的介面，程式碼裡也沒有一行會把檔案發出去，就算真有那麼個介面也一樣。
- **解碼器從這裡來，也哪裡都不去。** HEIC 說白了就是裝在盒式容器裡的 HEVC，除了 Safari 沒有瀏覽器解得開，所以這個頁面內建一份編譯成 WebAssembly 的 `libheif`，大約 1.4 MB，提交在這個儲存庫裡，從本站發出，跟這裡其他檔案一樣由 service worker 快取。它不從 CDN 取。走 CDN 等於把一個第三方塞進每一次訪問，還會讓這個工具離線用不成。二進位放在指令碼內部而不是擱在旁邊，就是為了啟動它連一次 fetch 都不用發。
- **這裡沒有任何東西會去聯網取資料。** 為這個工具寫的檔案裡，一個 `fetch`、一個 `XMLHttpRequest`、一個 `sendBeacon` 都找不到。隨附的這份引擎跟所有 Emscripten 構建一樣，帶著從某個 URL 取 `.wasm` 的載入路徑，但那些路徑走不到，二進位本來就在手上；就算走到了，`connect-src` 裡只列了 Google 的統計端點，瀏覽器當場就會拒絕。能當證據的是那條策略，不是那句話。
- **後設資料在這裡讀出來，也報給你看。** 頁面上那份列表會寫明每張照片帶著什麼，拍攝日期、相機，還有裡面有沒有 GPS 座標。把 JPEG 交給別人之前，這些多半是你想先知道的。讀取由 `src/boxes.js` 在這個瀏覽器裡完成，結果顯示在這個頁面上，寫進你的 JPEG 還是丟掉，你自己定。這個儲存庫裡沒有哪個統計事件會帶上檔名、日期、座標或者數量。
- **Google 載入了什麼，又拿不到什麼。** 廣告指令碼和統計指令碼來自 Google，捐助按鈕來自 Buy Me a Coffee。關於你照片的資訊，一條都沒給它們。讀檔案、解碼、寫檔案的每一行程式碼都從本站發出，也都擺在儲存庫裡。
- **斷網照樣能用。** 把頁面開一次，然後斷網，這個工具跟原來一模一樣，解碼器也一起快取下來了。這是最省事的一條證明，在這個頁面上還格外有分量。一個把照片送出去解碼的轉換器，絕無可能做到這一點。

**你可以自己核對。**上面這些不用你信。這個頁面是儲存庫裡的模板和配置產生出來的，構建指令碼你能讀，也能自己跑一遍，跑出來的結果就提交在 `dist` 分支上。拿實際發給你的內容，跟你自己從原始碼構建出來的結果對一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先讀的幾個檔案：`config/site.toml` 裡是 Content-Security-Policy，`src/heif.js` 裡是解碼器怎麼載入、允許做什麼，`src/boxes.js` 裡是找出照片後設資料的容器解析，`src/exif.js` 裡是這些後設資料進 JPEG 時的遭遇。引擎本身是 `vendor/libheif.js`，原樣未改，許可證就放在旁邊。
