목차
계약서나 동의서에 내 서명을 넣으려고 종이에 서명을 하고 휴대폰으로 찍어 봤는데, 막상 문서에 붙이면 종이의 회색 배경이 네모나게 같이 따라오죠. 서명만 깔끔하게 오려 낸 투명 배경 이미지가 필요한 순간이에요.
이 글은 서명이나 도장 사진에서 배경을 지우고 선만 남기는 방법을, 직접 하는 쪽과 도구를 만드는 쪽 모두가 따라 할 수 있게 정리해요. 어려운 말은 나올 때마다 풀어 드릴게요.
혹시 이런 고민 있으신가요?
- 서명 사진을 문서에 붙였더니 종이 색 네모가 같이 보여서 어색해요.
- 배경 지우기 앱을 썼더니 획이 끊기거나, 반대로 종이 얼룩이 같이 남아요.
- 도구가 실패했다고만 하고 왜 그런지, 어떻게 다시 찍어야 하는지 알려 주지 않아요.
이 글을 읽으면
- 서명 사진에서 배경이 지워지는 원리를 알고, 잘 안 될 때 어디를 의심해야 하는지 판단할 수 있어요.
- 잘 지워지는 사진을 찍는 요령과, 투명한 PNG 를 만드는 순서를 따라 할 수 있어요.
- 도구를 만든다면, 강도 조절과 실패 안내, 대기 화면을 어떻게 설계할지 기준을 잡을 수 있어요.
1단계. 지운다는 것이 무슨 뜻인지 정하기
먼저 용어부터 맞춰 볼게요. 흔히 배경을 지운다는 뜻으로 누끼를 딴다고 말해요. 사진에서 대상만 오려 내는 일이죠. 서명 사진에서 대상은 잉크 선이고, 배경은 종이와 그림자예요.
여기서 중요한 선택이 하나 있어요. 사람이나 사물 사진은 인공지능이 물체의 모양을 알아보고 오려 내요. 하지만 서명은 모양이 사람마다 다르고 아주 가늘어서, 그런 방식이 가는 획을 놓치지 않는지 직접 확인해 봐야 해요. 서명은 오히려 단순해요. 종이는 밝고 잉크는 어둡다는 것만 쓰면 돼요. 그래서 저희는 서명과 도장에는 모델이 아니라 밝기 계산으로 푸는 쪽을 골랐어요. 같은 사진이면 언제나 같은 결과가 나온다는 장점도 있어요.
| 방식 | 잘하는 것 | 서명에서 약한 점 |
|---|---|---|
| 모양을 알아보는 모델 | 사람, 물건처럼 덩어리가 있는 대상 | 가는 획이 끊길 수 있어요(직접 확인이 필요해요) |
| 밝기로 잉크를 가르는 계산 | 종이 위의 가는 선 | 종이에 그림자나 질감이 많으면 같이 잡혀요 |
사진 한 장이 빛 보정, 잉크 농도, 투명도 순서로 바뀌어요
TIP
도구를 고를 때 사람 사진용 배경 제거 기능으로 서명을 돌려 보고 획이 끊기는지 먼저 확인해 보세요. 끊긴다면 그 도구는 서명에 맞지 않는 거예요.
2단계. 사진부터 잘 찍기
도구가 아무리 좋아도 사진이 나쁘면 한계가 있어요. 그래서 도구를 만드는 쪽이라면 결과 화면보다 먼저 촬영 안내를 보여 주는 게 좋아요. 저희가 정리한 요령은 네 가지예요.
- 흰 종이에 하세요. 색 있는 종이나 줄 쳐진 종이는 줄까지 잉크로 읽혀요.
- 밝은 곳에서 찍으세요. 어두우면 종이와 잉크의 밝기 차이가 줄어서 구분하기 어려워요.
- 그림자가 지지 않게 하세요. 휴대폰이나 손이 만든 그림자는 어두운 얼룩이라서 잉크로 오해받기 쉬워요.
- 서명이 화면을 채우게 찍으세요. 서명이 작게 찍히면 가는 획이 몇 픽셀 안 돼서 지우다가 끊겨요.
이 네 가지는 처음에는 어디에도 없었고, 실패 화면에서 "다른 사진으로 다시 해 주세요"라고만 말했어요. 그런데 이 말은 사용자에게 아무것도 알려 주지 않아요. 왜 실패했는지 모르니 똑같이 찍어서 똑같이 실패하죠. 그래서 안내 문구를 요령으로 바꿨어요.
이전: 다른 사진으로 다시 해 주세요.이후: 흰 종이에 한 서명이나 도장을 밝은 곳에서 그림자 없이, 화면을 채우게 찍어 다시 해 주세요.이 문구는 실패 화면뿐 아니라 첫 화면의 바로 해보기에서도 같이 보이게 했어요. 실패한 다음에 알려 주는 것보다 찍기 전에 알려 주는 쪽이 사용자의 시간을 아껴 줘요. 여러분이 바꿀 점은 문구의 내용이에요. 도장만 다루는 도구라면 인주를 고르게 찍는 요령을, 사인펜 서명만 다루는 도구라면 펜 종류 이야기를 넣어 보세요.
TIP
안내 문구는 고칠 수 있는 행동으로 써 주세요. "사진이 좋지 않아요"는 판정이고, "그림자 없이 찍어 주세요"는 행동이에요. 사용자는 행동을 받을 때 다시 시도해요.
3단계. 종이의 빛을 지우고 잉크 농도를 투명도로 바꾸기
이제 계산 쪽이에요. 큰 흐름은 세 단계예요.
첫째, 종이 밝기를 추정해서 사진을 그 밝기로 나눠요. 사진 속 모든 점의 밝기는 종이의 색에 조명이 곱해진 값이에요. 그래서 종이가 받은 빛을 알아내서 나누면 조명 얼룩과 그림자가 평평해져요. 한쪽이 어둡던 종이가 고르게 하얗게 바뀌는 것과 같아요.
둘째, 이 평평해진 사진에서 점마다 잉크가 얼마나 진한지를 구해요. 종이는 0, 잉크로 가득 찬 점은 1 이에요.
셋째, 그 농도를 그대로 투명도로 써요. 농도가 0 이면 완전히 투명하고, 1 이면 완전히 불투명하고, 그 사이는 반투명이에요. 색은 사진에서 잉크 색을 재서 밝기만 조금 낮춘 한 가지 색으로 정해요. 파란 펜은 파랗게, 검은 펜은 검게 남고, 종이 색은 어디에도 남지 않아요.
여기서 처음 만든 방식은 잉크인지 아닌지를 검정과 흰색 둘로만 나누는 방식이었어요. 그런데 이러면 획의 가장자리가 톱니처럼 거칠어져요. 투명도를 0 에서 1 까지 이어지는 값으로 바꾸고 나서 가장자리가 부드러워졌고, 이 투명도는 뒤에서 PDF 에 붙일 때도 그대로 쓰여요.
바꿔 보고 재 본 숫자가 있어요. 실제 서명 사진 한 장에서, 잉크로 판정한 점들의 밝기 평균이 0 이 검정일 때 약 152 에서 약 37 로 내려갔어요. 이전 방식은 사진의 회색 점을 그대로 써서 잉크가 연한 회색으로 나왔고, 조명 보정 뒤에는 진한 검정에 가깝게 나온 거예요. 서명이 문서 위에서 흐릿해 보이는 이유가 이 차이였어요.
참고
한 장짜리 사진으로 잰 값이라서 모든 사진에 같은 숫자가 나온다는 뜻은 아니에요. 여러분의 도구라면 자기 사진 몇 장으로 직접 재 보세요.
이 계산은 Python 으로 만든 서버에서 돌려요. 저희는 FastAPI 라는 도구로 이미지 처리 서버를 따로 두고, 웹 서버가 사진을 넘기면 결과 PNG 를 돌려받아요. 여러분이 만든다면 브라우저 안에서 돌릴지 서버에서 돌릴지는 사진을 어디까지 밖으로 보낼 수 있는지와 함께 정하세요.
4단계. 강도 슬라이더로 사용자가 마지막 판단하기
같은 사진이라도 어떤 사람은 연한 펜으로 쓰고, 어떤 사람은 종이에 질감이 많아요. 계산이 어떤 값으로 판단하든 틀리는 사진이 남아요. 그래서 마지막 판단은 사용자에게 맡기는 강도 슬라이더를 넣었어요.
강도는 두 가지 값을 함께 움직여요. 하나는 이 정도 농도부터 잉크로 보겠다는 문턱이고, 다른 하나는 이 농도부터 완전히 불투명하게 하겠다는 기준이에요. 강도를 올리면 문턱이 낮아져서 연한 선도 잡히고, 내리면 진한 부분만 남아요.
실제 서명 사진(긴 변 640 픽셀)으로 강도를 바꿔 보며 불투명하게 남은 점의 수를 셌어요.
| 강도 | 남은 점 수 |
|---|---|
| 20% | 3,747 |
| 30% | 5,089 |
| 50% | 7,549 |
| 80% | 10,350 |
| 100% | 12,336 |
눈으로 본 결과도 같았어요. 20% 에서는 획 끝과 ㅇ 같은 고리 일부가 끊어졌고, 50% 와 80% 에서는 모든 획이 이어지고 진하게 나왔어요. 100% 까지 올려도 종이 자국을 끌어오지 않았어요. 그래서 슬라이더는 30% 에서 100% 까지, 10% 단위로, 기본값은 50% 로 정했어요. 끊기는 20% 는 아예 노출하지 않은 거예요.
슬라이더를 만들 때 놓치기 쉬운 점이 두 가지 있어요.
- 손잡이를 끄는 동안에는 서버에 요청하지 않고, 손을 뗄 때 한 번만 요청해요. 끄는 동안 요청하면 버려질 결과에 처리 한도를 써 버려요. 확인해 보니 끄는 동안 요청은 0 건, 뗀 뒤 1 건이었어요.
- 손잡이 위치와 실제 적용된 값을 따로 들고 있어요. 요청이 실패하면 손잡이는 새 값인데 그림은 이전 값일 수 있어서, 이전 결과를 계속 보여 주고 계속 진행할 수 있게 했어요.
TIP
슬라이더의 양 끝 값은 눈으로 확인해서 정하세요. 이론상 0 부터 100 까지 열어 두면 끝 쪽은 쓸 수 없는 결과만 나와서 사용자가 길을 잃어요.
5단계. 실패와 기다림을 사용자 말로 설계하기
처리가 실패하는 경우와 오래 걸리는 경우가 사용자에게는 가장 불안한 순간이에요. 이때 화면이 무엇을 말하느냐가 다시 시도하느냐 떠나느냐를 가르니까, 두 경우를 따로 설계했어요.
실패는 이유별로 길을 나눴어요. 사진을 읽지 못한 경우에는 2단계의 촬영 요령을 보여 주고, 같은 사진의 영역을 다시 고르는 버튼을 함께 둬요. 전에는 사진부터 새로 골라야 했는데, 같은 사진이 자르기 화면에 다시 열리게 했어요. 서명이 사진의 한쪽 구석에 작게 있었다면 영역만 다시 골라도 해결되는 경우가 많거든요. 사용 한도를 넘긴 실패에는 이 버튼을 보여 주지 않았어요. 다시 해도 같은 이유로 막히기 때문이에요.
기다림은 진행률 대신 흐른 시간을 보여 줘요. 처음에는 아무 글도 없는 회색 자리만 있었어요. 지금은 빙글빙글 도는 표시와 함께 "사진에서 배경을 지우고 있어요"라는 글, 그리고 지난 초를 보여 줘요. 10초를 넘기면 "조금 더 걸리고 있어요. 화면을 닫지 말고 기다려 주세요."로 바뀌어요.
여기서 많이 묻는 질문이 있어요. 진행률 막대나 예상 시간을 넣으면 더 좋지 않으냐는 거예요. 저희는 넣지 않았어요. 배경 제거 처리는 진행률을 알려 주지 않고, 걸린 시간을 쌓아 둔 기록도 없었어요. 그러면 예상 시간은 근거 없는 숫자가 되고, 틀린 숫자는 아예 없는 것보다 더 큰 불안을 줘요. 실제로 흐른 시간은 틀릴 수가 없어서 정직한 대안이에요.
기다림 화면은 한 곳에만 고쳤더니 결과 화면과 첫 화면의 바로 해보기 두 곳에 함께 적용됐어요. 이미 나온 결과를 다시 지우는 중일 때 결과를 덮는 화면에도 같은 안내가 나와요. 같은 일을 하는 화면은 같은 부품을 쓰게 두면 고치는 곳이 하나로 줄어요.
TIP
실패 화면에는 반드시 다음 행동 버튼을 두세요. 문구만 있는 실패 화면은 사용자를 처음으로 돌려보내요. 바로 전 단계로 돌아가는 버튼 하나가 다시 시도하는 비율을 바꿀 거라는 건 가설이에요. 저희는 이 버튼의 클릭 수와 그 뒤 완료 비율로 확인하기로 했어요.
6단계. 내보내고 고치는 길까지 이어 두기
지운 결과를 PNG 로 받으면 끝이 아니에요. 연속 투명도로 바꾼 결과가 다음 단계에서도 깨지지 않는지 확인해야 해요. 저희가 확인한 것은 두 가지예요.
- 지우개로 잡티를 지우면 지운 자리가 반투명한 가장자리까지 투명해져서 잔상이 남지 않아요.
- PDF 에 붙일 때 반투명한 가장자리가 그대로 들어가서, 확대해도 가장자리가 톱니 없이 부드러워요. PDF 는 이미지에 투명도 정보를 따로 붙이는 규칙이 있고, 연속 투명도가 이 규칙으로 그대로 들어가요.
도장은 서명과 다르게 처리해요. 도장 인주는 붉고, 고르게 찍히지 않아요. 그래서 잉크 농도를 서명처럼 밝기로만 재면 연한 부분이 사라져요. 대신 붉은 채널과 나머지 채널의 비율, 그리고 종이 색과의 색 차이를 함께 가중해서 농도를 구했고, 잉크 색은 인주색을 그대로 남겼어요. 완전히 불투명하게 볼 기준도 서명은 가장 진한 점으로, 도장은 가장 진한 쪽 0.1% 지점의 0.8 배로 다르게 잡았어요. 인주는 고르게 찍히지 않아서 가장 진한 점을 기준으로 삼으면 대부분이 연해 보여 버려지기 때문이에요.
처음에는 이 기준을 백분위수, 즉 전체 점 중 위에서 몇 번째 값인지로 잡았다가 무너졌어요. 잉크가 화면의 1% 이상을 차지하면 기준이 잉크 안쪽으로 들어가 버려서, 시험 이미지에서 정확도가 크게 떨어졌어요. 도구를 만든다면 화면 대비 잉크 비율이 큰 도장 사진으로 꼭 시험해 보세요.
자주 묻는 질문
Q1. 휴대폰 앱의 배경 제거 기능으로 서명을 지워도 되나요?
사람이나 사물 사진용 기능이 서명의 가는 획에도 맞는지는 도구마다 달라요. 결과를 확대해서 획이 이어져 있는지 보고, 끊긴다면 밝기로 잉크를 가르는 방식의 도구를 써 보세요.
Q2. 서명 사진을 서버에 올려도 괜찮을까요?
서명은 개인 정보에 가까워요. 직접 만든다면 처리가 끝난 뒤 사진을 남기지 않게 설계하고, 그 사실을 사용자에게 화면에서 알려 주세요. 보관하지 않는다는 약속이 신뢰를 만들어요.
Q3. 이렇게 만든 서명 이미지는 법적 효력이 있나요?
법적 효력이 있다고 약속하지 않는 게 안전해요. 서명 이미지를 문서에 넣는 일과 본인 확인과 기록을 갖춘 전자계약은 다른 일이에요. 효력이 중요한 계약이라면 그런 전용 서비스를 쓰세요.
정리
- 서명 지우기는 모양을 알아보는 모델보다, 종이는 밝고 잉크는 어둡다는 점을 쓰는 밝기 계산이 잘 맞아요.
- 조명을 먼저 평평하게 만들고, 잉크 농도를 0 에서 1 로 구해 그대로 투명도로 쓰세요.
- 강도 슬라이더는 눈으로 확인한 범위만 열고, 손을 뗄 때 한 번만 요청하세요.
- 실패 문구는 판정이 아니라 고칠 수 있는 행동으로 쓰고, 다음 행동 버튼을 두세요.
- 기다림 화면은 근거 없는 예상 시간 대신 실제로 흐른 시간을 보여 주세요.
배경 지우기는 계산 한 번으로 끝나는 일처럼 보여도, 사용자가 만나는 것은 촬영, 강도, 실패, 기다림이에요. 이 네 곳을 하나씩 다듬으면 같은 계산으로도 훨씬 믿음직한 도구가 돼요. 셀루도는 서명과 도장 사진을 이 순서로 투명 PNG 로 만들고, PDF 의 원하는 자리에 붙이는 일까지 한 흐름으로 도와줘요.