# 증명사진 만들기 — 여권·비자 사진 규격 그대로

나라를 고르세요. 그 나라의 규정을 그대로 적용합니다.

> 여권이나 비자 사진을 해당 국가가 공표한 규정대로 만듭니다. 정확한 mm와 DPI, 실시간 얼굴 높이·눈높이 안내선, 배경 검사, 인쇄용 4x6 시트, 그리고 제출 사이트의 KB 제한에 맞춘 파일까지. 아무것도 업로드되지 않습니다.

이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/증명사진-만들기/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.

## 사진은 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.

자르기도, 측정도, 배경 판독도, 인쇄도 모두 내 브라우저가 내 기기의 성능으로, 브라우저에 이미 들어 있는 JPEG 인코더를 써서 합니다. 이 도구에는 네트워크 기능이 하나도 없습니다. 가져올 것도 보낼 것도 없어요. 설령 보내려 해도 이 페이지 반대편에는 내 얼굴 사진을 받아 줄 서버 자체가 없습니다.

- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 워터마크 없음
- ✓ 오프라인 동작
- ✓ 오픈 소스

## 반려되지 않는 여권 사진 만드는 방법

1. **사진을 고릅니다.** 민무늬 벽 앞에서, 낮에, 1.5미터쯤 떨어져 휴대폰으로 찍은 사진이면 됩니다. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다.
2. **나라와 서류를 고릅니다.** 그러면 패널에 그 규정의 인쇄 크기와 얼굴 높이 구간, 눈높이, 배경색, 업로드 제한이 표시됩니다. 각 수치가 어느 기관에서 왔고 언제 읽어 온 것인지까지 함께요. 그 목록에 짐작으로 적힌 것은 하나도 없고, 받으신 안내가 목록에 없는 것이라면 “그 밖의 나라”로 들어갑니다.
3. **얼굴 위의 네 점을 확인하세요.** 정수리와 턱 끝, 그리고 양쪽 눈동자 — 규정이 재는 것은 그 네 점이 전부입니다. 점은 사진 자체를 재어 놓이고, 그 아래 줄이 무엇을 재었고 무엇을 따져서 냈는지 말해 줍니다. 잘못 떨어진 점은 끌어다 놓거나, *제가 놓을게요*로 바꿔 네 점을 모두 직접 놓으세요. 그런 다음 *상자 맞추기*를 누르면 그 나라가 원하는 자리에 잘라내기가 놓입니다.
4. **네 가지 검사와 배경을 읽습니다.** 얼굴 높이, 눈높이, 가운데 정렬, 기울기. 각각을 지금 상자 그대로 측정하고, 벗어났다면 어느 쪽으로 끌어야 하는지도 말해 줍니다. 배경은 자른 영역의 위쪽과 양옆에서 읽어 규정이 요구하는 색과 비교합니다. 실제로 사진을 반려시키는 것은 얼룩짐인데, 그건 색과 따로 측정합니다.
5. **파일 세 개를 가져갑니다.** 인쇄용은 정확한 밀리미터로 만들고, 인화점이 제 크기로 뽑도록 해상도를 파일에 써 넣습니다. 시트는 ⁦4 × 6⁩ 한 장에 들어가는 만큼 복사해 넣고 사이에 자르는 표시를 둡니다. 업로드용은 제출 사이트가 요구하는 픽셀 크기로 만들고, 그 사이트가 위아래로 강제하는 KB 구간 안에 들어가게 맞춥니다.

## 자세한 설명

[반려되지 않는 여권 사진 찍는 방법](https://abox.tools/ko/가이드/여권사진-집에서-찍기/): 여권 사진이 실제로 무엇으로 측정되는지 - 얼굴 높이, 눈높이, 배경 - 어느 나라가 어떤 수치를 요구하는지, 그리고 온라인 양식이 강제하는 픽셀과 KB 제한을 맞추는 법.

## 상자 속 다른 도구

- [이미지 스택](https://abox.tools/ko/이미지-스택/): 스무 장을 한 장으로. 스무 번의 업로드도, RAW 변환기도 없이.
- [이미지 가리기](https://abox.tools/ko/이미지-가리기/): 가린 부분은 파일에서 지워집니다. 파일 안에 숨겨 두는 것이 아닙니다.
- [EXIF 확인 및 제거](https://abox.tools/ko/exif-정보-삭제/): 사진이 나에 대해 뭘 흘리고 있는지 확인하고, 빼냅니다.
- [DICOM 뷰어](https://abox.tools/ko/dicom-뷰어/): CT, MRI, 엑스레이, 초음파를 창과 헤더와 계측까지.

## 자주 묻는 질문

### 제 사진이 어딘가로 업로드되나요?

아닙니다. 사진을 디코딩하고 자르고 재고 쓰는 일은 내 기기에서 도는 내 브라우저가 하고, 브라우저에 이미 들어 있는 JPEG 인코더를 씁니다. 이 도구에는 네트워크 기능이 하나도 없어서 무언가를 가져오지도, 보내지도 않습니다. 이 페이지의 `Content-Security-Policy`에 연결해도 되는 주소가 전부 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 다른 도구보다 여기서 더 값어치 있는 사실이지요. 그 파일은 내 얼굴 사진이니까요.

### 어떤 나라를 지원하나요?

지금까지 옮겨 적은 규격은 ICAO 표준 자체, 미국(여권과, 업로드 규정이 다른 다양성 비자 신청), 영국, 솅겐 비자, 독일, 캐나다, 호주, 인도(여권과 ⁦35 × 45⁩ mm 인화본, 그리고 SSC/UPSC 원서용 사진과 서명), 중국, 일본입니다. 모든 항목에 그걸 가져온 기관과 읽어 온 날짜가 적혀 있습니다. 그 밖의 것은 “그 밖의 나라”로 들어가는데, 거기서는 모든 수치를 직접 입력하실 수 있습니다. 세계 대부분이 ICAO 기하 규격에 맞춰 발급하므로, 그 항목은 거기서 시작합니다.

### 얼굴 모델도 없이 정수리와 턱 끝, 눈을 어떻게 찾나요?

일반 얼굴 검출기에는 허락되지 않고 이 도구에는 허락되는 전제를 쓰기 때문입니다. 여기 실린 규정은 모두 같은 장면을 요구합니다 — 한 사람이 카메라를 마주 보고, 단순하고 고르게 밝은 벽 앞에 선 장면이지요. 그래서 벽 색은 사진 가장자리 에서 읽고, 그 색이 아닌 것은 전부 사람이며, 그 맨 위가 머리카락을 포함한 정수리입니다. 눈동자는 제 주변보다 어두운 얼룩 가운데 같은 높이에 있고 머리 가운데를 사이에 두고 갈라진 가장 좋은 한 쌍으로 찾습니다. 비교가 국소적이라 얼굴 색에 기대는 대목이 하나도 없습니다. 턱 끝만은 이렇게 찾을 수 없습니다. 목 앞의 턱은 색이 바뀌지 않는 부드러운 경계이기 때문입니다. 그래서 위의 머리카락까지 세면 머리 높이의 한가운데보다 조금 아래에 있는 눈동자에서 따져 내고, 윤곽과 맞춰 확인합니다. 전부 `src/detect.js`의 산술입니다. 가중치도 추론 런타임도 없고, 아무것도 받아 오지 않으며, 어떤 얼굴에나 같은 산술입니다. 마지막 대목이 중요한 까닭은, 함께 실린 검출기는 고르게 틀리지 않고 — 어떤 얼굴에서 다른 얼굴보다 더 나쁘고 — 원래도 사진이 가장 자주 반려되는 사람들이 먼저 버려지기 때문입니다.

### 놓아 준 점을 얼마나 믿어야 하나요?

출발점으로 삼을 만큼은 믿어도 되고, 보지 않고 넘어갈 만큼은 아닙니다. 네 점 하나하나마다 틀리는 사진이 있습니다. 무늬 있는 벽이나 책장 앞에서는 머리를 떼어낼 윤곽이 남지 않고, 위가 잘린 머리에는 정수리가 사진에 아예 없으며, 안경이나 두꺼운 앞머리, 감은 눈은 눈동자를 엉뚱한 자리에 놓을 수 있습니다. 그래서 이 도구는 네 점 가운데 무엇을 재었고 무엇을 따져서 냈는지 분명히 말하고, 단순한 배경이 없는 사진에서는 답을 지어내는 대신 아예 거절하며, 모든 점을 계속 끌 수 있게 둡니다. 잘라내기는 점이 최종적으로 놓인 자리에서 만들어지고, 처음 놓였던 자리에서는 결코 만들어지지 않습니다. 네 점을 직접 놓고 싶다면 사진 위의 스위치에 *제가 놓을게요*가 있습니다. 점을 손으로 옮기면 저절로 그쪽으로 넘어가고, 그때부터 점은 당신 것이라 아무것도 움직이지 않습니다.

### 얼굴 높이 규정이 무엇이고, 제 사진은 왜 계속 걸리나요?

이 규격들은 하나같이 얼굴이 화면의 얼마를 채워야 하는지를 정해 두는데, 턱 아래부터 머리카락을 포함한 정수리까지로 잽니다. 보통 70~80%이고, 45 mm 사진이라면 31.5~36 mm입니다. 걸리는 가장 흔한 이유는 셀카입니다. 팔 길이는 60 cm쯤이라 얼굴이 왜곡되고 머리가 화면에서 너무 커집니다. 두 번째로 흔한 이유는 정수리를 잘못 잡는 것입니다. 헤어라인이 아니라 머리카락의 맨 위인데, 헤어라인에 표시하면 모든 머리가 너무 작게 나옵니다.

### 파일이 왜 최소 20KB여야 하고, 어떻게 채워 넣나요?

인도의 시험 접수 사이트와 중국 비자 양식, 영국 여권 업로드는 모두 최대 용량뿐 아니라 최소 용량도 정해 둡니다. 그 아래인 파일은 대개 누군가 실수로 올린 미리보기 이미지이기 때문입니다. ⁦200 × 230⁩ 사진은 46,000픽셀이고, 브라우저가 쓸 수 있는 최고 화질로도 15 KB에 떨어질 수 있는데, 덜 압축해서 더 크게 만들 방법이 없습니다. 그래서 이 도구는 공백으로 채운 JPEG 주석 세그먼트를 붙입니다. JPEG 표준의 일부이고, 모든 디코더가 건너뛰며, 사진은 비트 하나까지 같은 사진입니다. 파일만 길어질 뿐이죠. 그 채움말이 정확히 그 사실을 파일 안에 영어로 적어 둡니다.

### 배경도 검사하나요? 배경을 바꿔 줄 수도 있나요?

검사는 하고 교체는 하지 않습니다. 색은 자른 영역의 위쪽 띠와 어깨 위 양옆에서 읽어, RGB가 아니라 CIE Lab에서 규정의 색과 비교합니다. RGB로 40 떨어진 회색 둘은 구별되지 않지만 파랑에서 40은 다른 색이니까요. 얼룩짐은 따로 측정합니다. 실제로 사진을 반려시키는 것은 흰 벽에 드리운 그림자인데, 그건 색의 문제가 아니기 때문입니다. 배경을 바꾼다는 것은 사람을 사진에서 오려 낸다는 뜻이고 그건 분할 모델인데, 나쁜 모델은 머리카락을 먹어 치웁니다. 벽에서 30센티만 더 떨어져 서면 어떤 필터보다 많은 문제가 해결됩니다.

### ⁦4 x 6⁩ 시트는 어디에 쓰나요?

즉석 사진 부스는 여섯 장에 몇천 원을 받습니다. 사진 인화 코너는 ⁦6 × 4⁩ 한 장을 몇백 원에 뽑아 주고, 어디서나 해 줍니다. 그래서 이 도구는 종이가 담을 수 있는 만큼 사진을 늘어놓습니다. ⁦6 × 4⁩에 ⁦35 × 45⁩라면 여덟 장이고, 사이에 자르는 표시를 두며, 사진 위에는 아무것도 인쇄하지 않습니다. 맞추려고 줄이는 것도 하나도 없습니다. 모든 사본이 규정이 요구하는 크기 그대로예요. 한 장 더 넣겠다고 2%씩 줄인 시트는 결국 크기가 틀린 사진 여덟 장이니까요. 100%로 인쇄하세요. 시트를 망치는 것은 “페이지에 맞춤”입니다.

### 픽셀이 같은데 DPI가 왜 중요한가요?

JPEG는 자기가 어떤 크기인지 말할 수 있고, 말하지 않으면 인쇄하는 쪽이 짐작하기 때문입니다. 해상도는 JFIF 헤더에 들어 있는데, 브라우저 캔버스는 그 헤더의 단위 필드를 “이건 해상도가 아니라 종횡비다”로 놓고 씁니다. 이 도구는 그 몇 바이트를 다시 써서 파일이 300 dpi라고 말하게 합니다. ⁦413 × 531⁩ 픽셀을 크기 없는 이미지가 아니라 ⁦35 × 45⁩ mm 사진으로 만드는 것이 바로 그것입니다. 그러기 위해 디코딩되는 것도, 치르는 화질도 없습니다.

### 서명 파일도 만들 수 있나요?

됩니다. SSC와 UPSC 원서는 ⁦140 × 60⁩ 픽셀에 10~20 KB짜리를 요구하는데, 그것도 자기 규격으로 목록에 있습니다. 서명에는 눈높이가 없으므로 얼굴 안내선은 꺼지고, 대신 종이가 밝은지, 잉크가 있는지, 자른 영역에 괘선이나 종이 가장자리가 들어오지 않았는지를 확인합니다. 그 규정에서 어려운 쪽은 20 아래로 남는 것이 아니라 10 KB에 닿는 것입니다.

### 이걸 쓰면 신청이 통과되나요?

아닙니다. 어떤 도구도 정직하게는 그렇게 말할 수 없습니다. 이 도구가 하는 일은 공표된 수치를 정확히 적용하고 자기가 잰 값을 하나도 빼놓지 않고 보여 주는 것입니다. 양식이 자동으로 재는 것, 그러니까 픽셀 크기와 파일 용량과 형식은 맞게 해 둡니다. 사람 심사관이 재는 것, 그러니까 얼굴 높이와 눈높이와 배경은 숫자를 달아 눈앞에 놓아 드립니다. 규정은 바뀌기도 합니다. 그래서 여기 모든 규격에 어느 기관에서 언제 읽어 왔는지가 적혀 있습니다. 이 표를 믿는 대신 눈앞의 안내문과 대조해 보시라고요.

### 무료인가요? 가입해야 하나요?

무료이고 계정도, 로그인도, 체험판도, 얼굴을 가로지르는 워터마크도 없습니다. 사진을 몇 장 만들든 제한도 없습니다. 그 값을 치를 서버가 없으니까요. 이 사이트는 광고로 유지되는데, 그 광고에도 내 사진에 관한 것은 넘어가지 않습니다.

### 오프라인에서도 되나요?

됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 규정집은 조회해 오는 것이 아니라 페이지와 함께 제공되는 파일이니까요. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 사진을 어딘가로 보내서 잘라 오는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.

## 이 약속을 직접 확인하는 방법

- **내 얼굴 사진은 이 기기 밖으로 나가지 않습니다.** 다른 도구보다 여기서 더 중요한 이야기입니다. 이 페이지가 다루는 파일은 내 얼굴 사진이고, 그걸로 하려는 일은 어느 나라의 서류를 신청하는지까지 말해 주니까요. 이 페이지가 연결해도 되는 주소는 `Content-Security-Policy`에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 사진이 모일 만한 수신 지점이 여기에는 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** `src/` 어디에도 `fetch`도, `XMLHttpRequest`도, `sendBeacon`도 없습니다. 규정집은 `src/specs.js`에 든 표이고, 페이지와 함께 제공되고 함께 캐시됩니다. 찾아볼 국가 목록도, 원격으로 사진을 대조할 것도 없습니다.
- **얼굴은 얼굴 모델 없이 찾습니다.** 내려받을 가중치도, 그것을 돌릴 추론 런타임도, 받아 오는 것도 없습니다. 정수리는 뒤쪽 벽에 대비되는 머리의 윤곽에서, 눈동자는 얼굴에서 주변보다 어두운 자리에서 나옵니다. 그 어디에서도 피부색을 읽지 않고, 그렇게 쓴 이유가 바로 그것입니다 — 틀리는 모델은 고르게 틀리지 않고, 어떤 얼굴에서 다른 얼굴보다 더 나쁩니다. 이것은 판정이 아니라 출발 위치입니다. 네 점 가운데 무엇을 재지 못했는지는 페이지가 말해 주고, 모든 점은 계속 끌 수 있으며, *제가 놓을게요*로 바꾸면 아예 꺼집니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서, 후원 버튼은 Buy Me a Coffee에서 옵니다. 어느 쪽에도 내 사진이나 얼굴, 어느 나라 규정을 골랐는지에 관한 것은 넘어가지 않습니다. 파일을 읽고 자르고 재고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 도구는 그대로입니다. 애초에 네트워크를 쓰는 단계가 없었으니까요. 가장 간단한 증거입니다.

**직접 확인해 보세요.** 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 `dist` 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다: https://github.com/A-Box-of-Tools/website

먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, 규정집은 `src/specs.js`에 있습니다. 각 나라가 공표한 수치와, 그것을 어느 기관에서 언제 읽어 왔는지가 함께 적혀 있고요. 표시한 네 점을 자르기로 바꾸는 산술은 `src/detect.js` 는 네 점을 어떻게 찾는지 — 윤곽 하나와 어두운 얼룩 둘뿐이고 모델은 어디에도 없습니다 —, `src/geometry.js`, 인쇄 해상도를 파일에 써 넣고 너무 작은 업로드 파일을 양식이 요구하는 크기까지 올려 주는 두 번의 헤더 수정은 `src/jpeg.js`에 있습니다.
