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

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

powershell -ExecutionPolicy Bypass -File serve.ps1

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

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

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

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

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

即時檢查: 檢查中…

離線: 檢查中…

不用信我們說的。開啟開發者工具,盯著「網路」面板,做一張護照照片試試。沒有哪個請求帶上圖片、縮圖、檔名,或者你選中內容裡的任何一個位元組。嫌麻煩就直接拔掉網線,照樣做。

1 選好照片

你瀏覽器能開啟的任何圖片都行。白天對著一面素淨的牆、從大約一米半外用手機拍的那種,正是這些規定當初設想的樣子。照片直接從你的磁碟上讀,不會發到任何地方。

2 選好國家和證件

下面每一個數字都是公佈的要求,抄錄自其下注明的機構。這份清單裡沒有一條是猜的,也沒有一條是去網上取的:它是 src/specs.js 裡的一張表,隨頁面一起送來。

3 標出臉,檢查構圖

頭頂、下巴,還有左右瞳孔。規定要量的全部就是這四個點,裁切框取自它們最後停在哪裡——哪個落偏了就拖回來,然後按套用裁切框。找這四個點,靠的是量這張照片本身:你的頭在背後那面牆前的輪廓,以及眼睛所在的那兩塊偏暗的地方。裡頭沒有模型,也不去取任何東西;它是個起點,不是判決——所以改它是你的事,下面那行也會說清楚四個點裡哪一個它量不出來。

選好一張照片,裁切框就會出現在這裡。

4 背景

取自裁切框頂部的一條帶子,以及兩側肩膀以上的部分,也就是畫面裡本該只有背景的地方。在 CIE Lab 裡測量,而不是在 RGB 裡,因為相差四十個 RGB 單位的兩種灰根本分不出來,而四十個單位的藍就是另一種顏色了。

5 儲存

以 Markdown 檢視

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

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

說得更細的版本

怎麼拍一張不會被退回來的證件照 證件照真正被量的是什麼——頭部高度、眼睛的位置、背景——哪個國家要哪些數字,以及怎麼滿足網上表格卡的畫素和 KB 限制。

常見問題

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

不會。影像的解碼、裁切、測量和寫出,都由你自己的瀏覽器在你自己的硬體上完成,用的是瀏覽器本來就帶的 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。

用了這個,我的申請就一定能過嗎?

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

它免費嗎,需要註冊嗎?

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

斷網能用嗎?

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