自己动手核实。 None of the above has to be taken on trust. This page is generated from the templates and config in the repository by a build script you can read and run yourself, and the result is committed to the dist branch — so you can diff what is served against what a build of the sources produces:
The files worth reading first are config/site.toml for the Content-Security-Policy,src/specs.js 是那本规格册,里头是各国公布的数字;src/sources.js 写着每一条出自哪个机构、哪天读的;src/detect.js 是四个点怎么找出来的——一条轮廓加两块暗斑,哪儿也没有模型——;src/geometry.js 是把四个标记点算成一个裁切框的那套算术;src/jpeg.js 是两处文件头改写,负责把打印分辨率写进文件,以及把偏小的上传文件抬到表单坚持的大小。
如果你公司的安全软件警告有上传行为。 A warning when a file is selected does not establish that it was sent. For a local processing action, inspect request URLs and payloads in your browser's Network tab, and compare them with this page's source. Optional fetching and intentional sharing have their own explanations. Your IT team can run the same check.
# 证件照制作
选择支持的国家和证件。公布的要求与指导值均有标注。
> 为支持的国家准备护照或签证照片:公布尺寸、注明的裁切指导值、头高和眼线提示、背景检查、打印拼版及 JPEG 上传预设。照片始终留在你的浏览器。
This is an interactive browser tool at https://httcup.github.io/tools/id-photo/. Files are processed on the device running that browser. Any deliberate sharing or optional network feature is described on the page. What follows is its written explanation; open the address to use it.
## Your 照片 are **processed in your browser**. No processing upload.
裁切、测量、读取背景和排版打印,全都在你自己的浏览器里、你自己的硬件上完成,用的是浏览器本来就带的 JPEG 编码器。这个工具没有任何形式的网络功能,没有什么可取,也没有什么可发。就算真有路,页面的另一端也根本没有服务器来接收一张你的面部照片。
- ✗ 不上传
- ✗ 不注册
- ✗ 无水印
- ✓ 断网可用
- ✓ 开源
## 如何准备护照照片
1. **选好照片。** 白天,对着一面素净的墙,从大约一米半外用手机拍的一张就行。浏览器直接从磁盘上读,这期间没有任何东西发往别处。
2. **选好国家和证件。** 在框里打国家地区的名字,或者点开它的列表,然后选你要办的是这个国家地区的哪一种证件。面板随即显示那条规定的打印尺寸、头高区间、眼线、背景色和上传限制,并注明每个数字出自哪个机构、哪天读的。这份清单里没有一条是猜的;要是人家给你的要求不在上面,就走“其他国家和地区”自己填。
3. **看一眼脸上那四个点。** 头顶、下巴和左右瞳孔——规定要量的全部就是这四个点。它们是量这张照片本身放上去的,下面那行会说哪几个量出来了、哪几个是推出来的。哪个落偏了就拖回来,或者切到*我自己放*,四个都自己放。然后按*套用裁切框*,裁切框就落在那个国家要的位置上。
4. **看那四项检查,还有背景。** 头高、眼线、居中和倾斜,每一项都是按当前的框量出来的,超标的还会说明该往哪边拖。背景取自裁切框的顶边和两侧,再和规定要求的颜色比对;真正让照片被退回的“不均匀”,是和颜色分开量的。
5. **把三个文件带走。** 打印用的那张,尺寸精确到毫米,分辨率写在文件里,冲印店才会按正确大小出。拼版那张,10 × 15 上能排几张就排几张,缝隙里带裁切标记。还有上传用的那张,像素尺寸按门户要求,并落在它两头都卡的 KB 区间里。
## The longer version
[如何准备护照或证件照](https://httcup.github.io/tools/guides/make-a-passport-photo/): 编辑证件照前,先查对应证件和申请规则。了解裁切尺寸,再准备允许的打印、上传、工作证或签名副本。
## Also in the box
- [图片堆栈](https://httcup.github.io/tools/stack-images/): 二十张变一张,不用传二十次,也不用 RAW 转换器。
- [图片涂黑与打码](https://httcup.github.io/tools/redact-image/): 你遮住的那块是从文件里删掉的,不是藏在文件里。
- [EXIF 查看与清除](https://httcup.github.io/tools/exif-editor/): 看看一张照片把你交代了多少,然后删掉。
- [DICOM 阅片器](https://httcup.github.io/tools/dicom-viewer/): CT、MR、X 光和超声,连窗宽窗位、头信息和测量一起。
## Questions
### 我的照片会被传到哪里去吗?
不会。图像的解码、裁切、测量和写出,都由你自己的浏览器在你自己的硬件上完成,用的是浏览器本来就带的 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。本预设输出该尺寸;具体要求请查看本次申请的最新公告。签名不显示人脸参考线,工具会检查纸张是否明亮、墨迹是否可见,以及裁切中是否包含线条或纸边。
### 用了这个,我的申请就一定能过吗?
不能,而且任何工具都无法诚实地作此保证。它做的是把公布的数字一字不差地套用,并把它做过的每一次测量都摆给你看:这样表单自动测的那些东西——像素尺寸、文件大小、格式——是对的;而人工审核会看的那些东西——头高、眼线、背景——就带着数字摆在你面前。规定也会变:这里的每一条规格都写明出自哪个机构、哪天读的,好让你拿它去对照眼前那份表单,而不是盲信一张表。
### 它免费吗,需要注册吗?
免费,没有账号,不用登录,没有试用期,也不会在你脸上盖水印。做多少张照片也没有上限,因为没有哪台服务器在为它们掏钱。本站带广告,经费就是从那儿来的,广告拿不到任何关于你照片的信息。
### 断网能用吗?
能。页面加载一次之后断开网络,它照样干活——规格册是随页面一起送来的文件,不是一次查询。这也是证明“什么都没上传”最省事的办法,真要把你的照片送出去裁切,拔线那一刻就停了。
## How the privacy claim is verifiable
- **一张你的面部照片从不离开这台机器。** 这一点在这儿比在别的工具上更要紧:这个页面经手的文件是你脸的照片,而你接下来要拿它做的事,还说明了你在申请哪个国家的证件。`Content-Security-Policy` 里写着这个页面允许联系的每一个地址,没有一个属于本站。这里没有任何可以收走你照片的接收端。
- **这里不会去取任何东西。** 整个 `src/` 里没有 `fetch`,没有 `XMLHttpRequest`,也没有 `sendBeacon`。规格册是 `src/specs.js` 里的一张表,随页面一起送来、一起缓存。这里没有国家清单要去查,也没有什么要拿你的照片去远端比对。
- **找脸不靠人脸模型。** 没有要下载的权重,没有跑权重的推理运行时,也不去取任何东西:头顶来自你的头在背后那面墙前的轮廓,瞳孔来自脸上比周围更暗的那几块。里头没有一处读肤色,之所以这么写正是为了这个——会出错的模型不会均匀地出错,在某些脸上比在别的脸上更糟。它是起点而不是判决:页面会说四个点里哪一个没能量出来,每个点都还能拖,切到*我自己放*就整个关掉。
- **Google 加载了什么,又拿不到什么。** 广告脚本和统计脚本来自 Google,捐助按钮来自 Buy Me a Coffee。关于你的照片、你的脸,或者你选了哪个国家的规定,一条也没有交给它们。读取、裁切、测量、写出文件的每一行代码都由这个源提供,也都摆在仓库里。
- **断网也照样能用。** 断开网络,这个工具跟原来一模一样,因为它里面从来就没有联网这一步。这是最省事的一条证明。
**Check it yourself.** None of the above has to be taken on trust. This page is generated from the templates and config in the repository by a build script you can read and run yourself, and the result is committed to the `dist` branch — so you can diff what is served against what a build of the sources produces: https://github.com/httcup/tools
The files worth reading first are `config/site.toml` for the Content-Security-Policy,`src/specs.js` 是那本规格册,里头是各国公布的数字;`src/sources.js` 写着每一条出自哪个机构、哪天读的;`src/detect.js` 是四个点怎么找出来的——一条轮廓加两块暗斑,哪儿也没有模型——;`src/geometry.js` 是把四个标记点算成一个裁切框的那套算术;`src/jpeg.js` 是两处文件头改写,负责把打印分辨率写进文件,以及把偏小的上传文件抬到表单坚持的大小。