# 证件照制作 — 护照和签证照按规格来

选择支持的国家和证件。公布的要求与指导值均有标注。

> 为支持的国家准备护照或签证照片：公布尺寸、注明的裁切指导值、头高和眼线提示、背景检查、打印拼版及 JPEG 上传预设。照片始终留在你的浏览器。

这是一个浏览器交互工具，地址是 https://abox.tools/zh/id-photo/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明；使用工具请打开该地址。

## 你的照片**在浏览器里处理**，无须上传处理。

裁切、测量、读取背景和排版打印，全都在你自己的浏览器里、你自己的硬件上完成，用的是浏览器本来就带的 JPEG 编码器。这个工具没有任何形式的网络功能，没有什么可取，也没有什么可发。就算真有路，页面的另一端也根本没有服务器来接收一张你的面部照片。

- ✗ 不上传
- ✗ 不注册
- ✗ 无水印
- ✓ 断网可用
- ✓ 开源

## 如何准备护照照片

1. **选好照片。** 白天，对着一面素净的墙，从大约一米半外用手机拍的一张就行。浏览器直接从磁盘上读，这期间没有任何东西发往别处。
2. **选好国家和证件。** 在框里打国家地区的名字，或者点开它的列表，然后选你要办的是这个国家地区的哪一种证件。面板随即显示那条规定的打印尺寸、头高区间、眼线、背景色和上传限制，并注明每个数字出自哪个机构、哪天读的。这份清单里没有一条是猜的；要是人家给你的要求不在上面，就走“其他国家和地区”自己填。
3. **看一眼脸上那四个点。** 头顶、下巴和左右瞳孔——规定要量的全部就是这四个点。它们是量这张照片本身放上去的，下面那行会说哪几个量出来了、哪几个是推出来的。哪个落偏了就拖回来，或者切到*我自己放*，四个都自己放。然后按*套用裁切框*，裁切框就落在那个国家要的位置上。
4. **看那四项检查，还有背景。** 头高、眼线、居中和倾斜，每一项都是按当前的框量出来的，超标的还会说明该往哪边拖。背景取自裁切框的顶边和两侧，再和规定要求的颜色比对；真正让照片被退回的“不均匀”，是和颜色分开量的。
5. **把三个文件带走。** 打印用的那张，尺寸精确到毫米，分辨率写在文件里，冲印店才会按正确大小出。拼版那张，⁦10 × 15⁩ 上能排几张就排几张，缝隙里带裁切标记。还有上传用的那张，像素尺寸按门户要求，并落在它两头都卡的 KB 区间里。

## 说得更细的版本

[怎么拍一张不会被退回来的证件照](https://abox.tools/zh/guides/make-a-passport-photo/): 证件照真正被量的是什么——头部高度、眼睛的位置、背景——哪个国家要哪些数字，以及怎么满足网上表格卡的像素和 KB 限制。

## 工具箱里还有

- [图片堆栈](https://abox.tools/zh/stack-images/): 二十张变一张，不用传二十次，也不用 RAW 转换器。
- [图片涂黑与打码](https://abox.tools/zh/redact-image/): 你遮住的那块是从文件里删掉的，不是藏在文件里。
- [EXIF 查看与清除](https://abox.tools/zh/exif-editor/): 看看一张照片把你交代了多少，然后删掉。
- [DICOM 阅片器](https://abox.tools/zh/dicom-viewer/): CT、MR、X 光和超声，连窗宽窗位、头信息和测量一起。

## 常见问题

### 我的照片会被传到哪里去吗？

不会。图像的解码、裁切、测量和写出，都由你自己的浏览器在你自己的硬件上完成，用的是浏览器本来就带的 JPEG 编码器。这个工具没有任何形式的网络功能：它从不去取什么，也从不发出什么；页面的 `Content-Security-Policy` 里写着它允许联系的每一个地址，没有一个属于本站。这一点在这儿比在别的工具上更值钱，因为这个文件是你脸的照片。

### 覆盖了哪些国家？

够多了，多到在这里列出名字就成了一份每加一个国家就得改一次的清单。所以换个说法：每一条都抄录自公布它的那个机构，而且每一条都把机构和读取日期印在数字底下。选择器本身就是那份清单——在它里面打个国家名，一秒钟就知道在不在。不在的走“其他国家和地区”，那里每个数字都由你自己填；而由于世界上大多数地方都按 ICAO 的几何要求签发，那一项一开始就用的是它。 没人公布数字的国家也在单子上，并且在自己那一条里说清楚：画幅用的是世界上大多数地方签发所用的 ⁦35 × 45⁩ 毫米，区间用 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 的照片，而不是一幅没有具体尺寸的图。为此不需要解码，也不消耗画质。

### 签名文件也能做吗？

能。所引用的 IBPS 公告建议签名 JPEG 使用 ⁦140 × 60⁩ 像素，并要求 10 到 20 KB。本预设输出该尺寸；具体要求请查看本次申请的最新公告。签名不显示人脸参考线，工具会检查纸张是否明亮、墨迹是否可见，以及裁切中是否包含线条或纸边。

### 用了这个，我的申请就一定能过吗？

不能，而且任何工具都无法诚实地作此保证。它做的是把公布的数字一字不差地套用，并把它做过的每一次测量都摆给你看：这样表单自动测的那些东西——像素尺寸、文件大小、格式——是对的；而人工审核会看的那些东西——头高、眼线、背景——就带着数字摆在你面前。规定也会变：这里的每一条规格都写明出自哪个机构、哪天读的，好让你拿它去对照眼前那份表单，而不是盲信一张表。

### 它免费吗，需要注册吗？

免费，没有账号，不用登录，没有试用期，也不会在你脸上盖水印。做多少张照片也没有上限，因为没有哪台服务器在为它们掏钱。本站带广告，经费就是从那儿来的，广告拿不到任何关于你照片的信息。

### 断网能用吗？

能。页面加载一次之后断开网络，它照样干活——规格册是随页面一起送来的文件，不是一次查询。这也是证明“什么都没上传”最省事的办法，真要把你的照片送出去裁切，拔线那一刻就停了。

## 这条隐私承诺怎么核实

- **一张你的面部照片从不离开这台机器。** 这一点在这儿比在别的工具上更要紧：这个页面经手的文件是你脸的照片，而你接下来要拿它做的事，还说明了你在申请哪个国家的证件。`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/sources.js` 写着每一条出自哪个机构、哪天读的；`src/detect.js` 是四个点怎么找出来的——一条轮廓加两块暗斑，哪儿也没有模型——；`src/geometry.js` 是把四个标记点算成一个裁切框的那套算术；`src/jpeg.js` 是两处文件头改写，负责把打印分辨率写进文件，以及把偏小的上传文件抬到表单坚持的大小。
