# 證件照製作 — 護照和簽證照按規格來

選好國家，它就照那個國家的規定，一字不差地辦。

> 按你所在國家公佈的規定做護照或簽證照片：毫米和 DPI 精確到位，頭高和眼線即時疊加提示，檢查背景，一張可直接列印的 10x15 拼版，以及一個壓進辦事門戶 KB 限制裡的檔案。什麼都不上傳。

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

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

裁切、測量、讀取背景和排版列印，全都在你自己的瀏覽器裡、你自己的硬體上完成，用的是瀏覽器本來就帶的 JPEG 編碼器。這個工具沒有任何形式的網路功能，沒有什麼可取，也沒有什麼可發。就算真有路，頁面的另一端也根本沒有伺服器來接收一張你的面部照片。

- ✗ 不上傳
- ✗ 不註冊
- ✗ 無水印
- ✓ 斷網可用
- ✓ 開源

## 怎麼做一張不會被退回的證件照

1. **選好照片。** 白天，對著一面素淨的牆，從大約一米半外用手機拍的一張就行。瀏覽器直接從磁碟上讀，這期間沒有任何東西發往別處。
2. **選好國家和證件。** 面板隨即顯示那條規定的列印尺寸、頭高區間、眼線、背景色和上傳限制，並註明每個數字出自哪個機構、哪天讀的。這份清單裡沒有一條是猜的；要是人家給你的要求不在上面，就走「其他國家和地區」自己填。
3. **看一眼臉上那四個點。** 頭頂、下巴和左右瞳孔——規定要量的全部就是這四個點。它們是量這張照片本身放上去的，下面那行會說哪幾個量出來了、哪幾個是推出來的。哪個落偏了就拖回來，或者切到*我自己放*，四個都自己放。然後按*套用裁切框*，裁切框就落在那個國家要的位置上。
4. **看那四項檢查，還有背景。** 頭高、眼線、居中和傾斜，每一項都是按當前的框量出來的，超標的還會說明該往哪邊拖。背景取自裁切框的頂邊和兩側，再和規定要求的顏色比對；真正讓照片被退回的「不均勻」，是和顏色分開量的。
5. **把三個檔案帶走。** 列印用的那張，尺寸精確到毫米，解析度寫在檔案裡，沖印店才會按正確大小出。拼版那張，⁦10 × 15⁩ 上能排幾張就排幾張，縫隙裡帶裁切標記。還有上傳用的那張，畫素尺寸按門戶要求，並落在它兩頭都卡的 KB 區間裡。

## 說得更細的版本

[怎麼拍一張不會被退回來的證件照](https://abox.tools/zh-TW/guides/make-a-passport-photo/): 證件照真正被量的是什麼——頭部高度、眼睛的位置、背景——哪個國家要哪些數字，以及怎麼滿足網上表格卡的畫素和 KB 限制。

## 工具箱裡還有

- [圖片堆疊](https://abox.tools/zh-TW/stack-images/): 二十張變一張，不用傳二十次，也不用 RAW 轉換器。
- [圖片塗黑與打碼](https://abox.tools/zh-TW/redact-image/): 你遮住的那塊是從檔案裡刪掉的，不是藏在檔案裡。
- [EXIF 檢視與清除](https://abox.tools/zh-TW/exif-editor/): 看看一張照片把你交代了多少，然後刪掉。
- [DICOM 閱片器](https://abox.tools/zh-TW/dicom-viewer/): CT、MR、X 光和超音波，連窗寬窗位、頭資訊和測量一起。

## 常見問題

### 我的照片會被傳到哪裡去嗎？

不會。影像的解碼、裁切、測量和寫出，都由你自己的瀏覽器在你自己的硬體上完成，用的是瀏覽器本來就帶的 JPEG 編碼器。這個工具沒有任何形式的網路功能：它從不去取什麼，也從不發出什麼；頁面的 `Content-Security-Policy` 裡寫著它允許聯絡的每一個地址，沒有一個屬於本站。這一點在這裡比在別的工具上更值錢，因為這個檔案是你臉的照片。

### 覆蓋了哪些國家？

目前抄錄的規格有：國際民航組織（ICAO）標準本身，美國（護照，以及上傳規則不同的多元化簽證抽籤申請），英國，申根簽證，德國，加拿大，澳大利亞，印度（護照、⁦35 × 45⁩ mm 沖印，以及 SSC/UPSC 表單照片和簽名），中國和日本。每一條都註明出自哪個機構、哪天讀的。其他的走「其他國家和地區」，那裡每個數字都由你自己填；而由於世界上大多數地方都按 ICAO 的幾何要求籤發，那一項一開始就用的是它。

### 沒有人臉模型，它怎麼找到頭頂、下巴和眼睛？

靠一個通用人臉檢測器不能假設、而這個工具可以假設的前提：這裡每一條規定要的都是同一個場面——一個人，正對鏡頭，站在一面乾淨、打光均勻的牆前。於是牆的顏色從照片邊緣讀出來，凡不是這個顏色的就是人，人最上面那一點就是頭頂，連頭髮一起算。瞳孔則是這樣找的：在比自身周圍更暗的斑塊裡，挑出高度齊平、分居頭部中線兩側的最佳一對。這個比較完全是區域性的，所以裡頭沒有一處取決於一張臉是什麼顏色。下巴是唯一這樣找不到的，因為脖子前的下頜是一條不變色的軟邊；它由瞳孔推出來——把頭髮也算進頭高裡，瞳孔落在中點稍下——再拿輪廓來對一遍。這一切都是 `src/detect.js` 裡的算術：沒有權重，沒有推理執行時，不取任何東西，而且對每一張臉都是同一套算術。最後這點才是要緊的，因為隨工具附上的檢測器不會均勻地出錯——在某些臉上比在別的臉上更糟——而照片本來就最常被退回的那些人，恰恰是它最先辜負的。

### 它放的這幾個點，能信到什麼程度？

夠拿來當起點，不夠讓你不看一眼。四個點每一個都有會出錯的照片：有花紋的牆或一排書架就沒有輪廓可以襯出一個頭，從上面切掉的頭照片裡根本沒有頭頂，而眼鏡、厚劉海或閉著的眼睛都可能把瞳孔放到別的地方去。所以這個工具會明說四個點裡哪幾個是量出來的、哪幾個是推出來的，遇上沒有乾淨背景的照片寧可直接拒絕也不編一個答案，並且讓每個點都還能拖。裁切框取自這些點最後停在哪裡，絕不取自它們一開始在哪裡。要是你更想四個都自己放，照片上方那個開關寫著*我自己放*；而只要用手動過任何一個點，它自己就會切過去——從那一刻起這些點歸你，什麼都不會再去動它們。

### 頭高規定是什麼，為什麼我的老是不合格？

這些規格每一條都寫明頭部要佔畫面多少，從下巴底量到頭頂，含頭髮在內；通常是 70% 到 80%，對一張 45 mm 高的照片來說就是 31.5 到 36 mm。最常見的不合格原因是自拍：一臂長大約 60 cm，會讓臉變形，也讓頭在畫面裡顯得太大。第二常見的原因是頭頂：頭頂指的是頭髮的最高點，不是髮際線，標在髮際線上會讓每個頭都偏小。

### 為什麼檔案至少要 20 KB，又怎麼把它填大？

印度的考試門戶、中國的簽證表單和英國的護照上傳，都同時規定了最小和最大檔案大小，因為小於下限的檔案通常是有人誤傳的縮圖。一張 ⁦200 × 230⁩ 的照片是 46,000 個畫素，即便用瀏覽器能寫出的最高畫質，也可能只有 15 KB，而且沒法靠少壓縮把它變大。於是這個工具加了一段塞滿空格的 JPEG 註釋。這本來就是 JPEG 標準的一部分，任何解碼器都會跳過，畫面逐位都還是同一幅畫面，變長的只有檔案本身。那段填充裡就用英文寫著這件事。

### 它會檢查背景嗎，能替換背景嗎？

它檢查，但不替換。顏色取自裁切框頂部的一條帶子，以及兩側肩膀以上的部分，再和規定的顏色在 CIE Lab 裡比對，而不是在 RGB 裡：相差四十個 RGB 單位的兩種灰根本分不出來，而四十個單位的藍就是另一種顏色了。不均勻是單獨測的，因為白牆上的一道影子才是真正讓照片被退回的原因，而那不是顏色問題。替換背景意味著把人從畫面裡裁出來，那是分割模型的工作，做得不好會吃掉頭髮。往後退半米離牆遠一點，比任何濾鏡都更能解決問題。

### ⁦10 x 15⁩ 拼版是做什麼用的？

自助照相亭六張要收好幾十塊。照片店櫃檯印一張 ⁦10 × 15⁩ 只要幾毛錢，而且哪家都能印。所以這個工具會在紙上排下你這張照片能排的份數——⁦35 × 45⁩ 排在 ⁦10 × 15⁩ 上是八張——縫隙裡帶裁切標記，任何東西都不會壓在照片上。這裡不會為了排下而縮放：每一份都嚴格是規定要求的尺寸，因為一張為了多塞一份而把它們縮小百分之二的拼版，等於八張全都尺寸不對的照片。請按 100% 列印；把拼版弄錯的正是「適應頁面」。

### 畫素一樣的話，DPI 還有什麼關係？

因為 JPEG 可以宣告自己有多大，不宣告的話，列印它的東西就只能猜。解析度住在 JFIF 檔案頭裡，而瀏覽器的畫布寫這個頭時，會把單位欄位設成「這是寬高比，不是解析度」。這個工具改寫那幾個位元組，讓檔案寫明 300 dpi，正是這一點把 ⁦413 × 531⁩ 個畫素變成一張 ⁦35 × 45⁩ mm 的照片，而不是一幅沒有具體尺寸的圖。為此不需要解碼，也不消耗畫質。

### 簽名檔案也能做嗎？

能。SSC 和 UPSC 的表單要求 ⁦140 × 60⁩ 畫素、10 到 20 KB 的簽名，它作為單獨一條規格列在清單裡。做簽名時人臉疊加會關掉，因為簽名沒有眼線；換成檢查紙張是否夠白、上面是否有墨，以及裁切有沒有帶進一條格線或者頁邊。這條規定難的是夠到 10 KB，而不是不超過 20。

### 用了這個，我的申請就一定能過嗎？

不能，而且任何工具都無法誠實地作此保證。它做的是把公佈的數字一字不差地套用，並把它做過的每一次測量都擺給你看：這樣表單自動測的那些東西——畫素尺寸、檔案大小、格式——是對的；而人工稽核會看的那些東西——頭高、眼線、背景——就帶著數字擺在你面前。規定也會變：這裡的每一條規格都寫明出自哪個機構、哪天讀的，好讓你拿它去對照眼前那份表單，而不是盲信一張表。

### 它免費嗎，需要註冊嗎？

免費，沒有帳號，不用登入，沒有試用期，也不會在你臉上蓋水印。做多少張照片也沒有上限，因為沒有哪臺伺服器在為它們掏錢。本站帶廣告，經費就是從那裡來的，廣告拿不到任何關於你照片的資訊。

### 斷網能用嗎？

能。頁面載入一次之後斷開網路，它照樣運作——規格冊是隨頁面一起送來的檔案，不是一次查詢。這也是證明「什麼都沒上傳」最省事的辦法，真要把你的照片送出去裁切，拔線那一刻就停了。

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

- **一張你的面部照片從不離開這臺機器。** 這一點在這裡比在別的工具上更要緊：這個頁面經手的檔案是你臉的照片，而你接下來要拿它做的事，還說明了你在申請哪個國家的證件。`Content-Security-Policy` 裡寫著這個頁面允許聯絡的每一個地址，沒有一個屬於本站。這裡沒有任何可以收走你照片的接收端。
- **這裡不會去取任何東西。** 整個 `src/` 裡沒有 `fetch`，沒有 `XMLHttpRequest`，也沒有 `sendBeacon`。規格冊是 `src/specs.js` 裡的一張表，隨頁面一起送來、一起快取。這裡沒有國家清單要去查，也沒有什麼要拿你的照片去遠端比對。
- **找臉不靠人臉模型。** 沒有要下載的權重，沒有跑權重的推理執行時，也不去取任何東西：頭頂來自你的頭在背後那面牆前的輪廓，瞳孔來自臉上比周圍更暗的那幾塊。裡頭沒有一處讀膚色，之所以這麼寫正是為了這個——會出錯的模型不會均勻地出錯，在某些臉上比在別的臉上更糟。它是起點而不是判決：頁面會說四個點裡哪一個沒能量出來，每個點都還能拖，切到*我自己放*就整個關掉。
- **Google 載入了什麼，又拿不到什麼。** 廣告指令碼和統計指令碼來自 Google，捐助按鈕來自 Buy Me a Coffee。關於你的照片、你的臉，或者你選了哪個國家的規定，一條也沒有交給它們。讀取、裁切、測量、寫出檔案的每一行程式碼都由這個源提供，也都擺在儲存庫裡。
- **斷網也照樣能用。** 斷開網路，這個工具跟原來一模一樣，因為它裡面從來就沒有聯網這一步。這是最省事的一條證明。

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

最值得先讀的幾個檔案：`config/site.toml` 裡是 Content-Security-Policy，`src/specs.js` 是那本規格冊，裡頭是各國公佈的數字，每一條都寫著出自哪個機構、哪天讀的；`src/detect.js` 是四個點怎麼找出來的——一條輪廓加兩塊暗斑，哪裡也沒有模型——；`src/geometry.js` 是把四個標記點算成一個裁切框的那套算術；`src/jpeg.js` 是兩處檔案頭改寫，負責把列印解析度寫進檔案，以及把偏小的上傳檔案抬到表單堅持的大小。
