본문 바로가기
AI 콘텐츠 제작

사진 일괄 검수·접촉시트 만들기·Python contact sheet, 한 장씩 열기보다 접촉시트—파일이 있는데도 누락을 왜 못 볼까?

by AI노트12 2026. 8. 11.
반응형
먼저 얻을 답

사진을 한 장씩 열기 전에 접촉시트로 비교할 수 있는 범위와 사람이 원본을 다시 봐야 하는 경계를 구분한다.

새 휴대전화 사진이나 AI 생성 이미지를 한꺼번에 모았을 때 파일명을 바꾸거나 삭제하기 전에 전체 배열을 먼저 확인하는 상시 검수 절차로 쓸 수 있다.

읽기 전에 확인할 근거

근거 1Pillow 공식 Image 문서의 파일 열기와 새 캔버스 생성 기능
근거 2Python pathlib 공식 문서의 디렉터리 항목과 경로 처리 기능
근거 3make_contact_sheet.py의 확장자 필터·정렬·라벨·출력 계산 코드
근거 4PNG 3장을 파일명순으로 배치한 대표 접촉시트 생성 결과
접촉시트와 원본 사진을 함께 대조하며 자동 판정이 아닌 수동 검수를 준비하는 장면

사진 일괄 검수는 파일 이름순으로 축소 이미지를 한 화면에 모으면 시작하기 쉬워요. 다만 접촉시트는 사람이 비교하기 위한 화면일 뿐, 중복이나 깨진 구도를 자동으로 판정하거나 승인하지는 않습니다.

이번 기준은 실제로 만든 make_contact_sheet.py의 코드를 Pillow와 Python 공식 문서에 대조하고, PNG 3장을 넣어 대표 접촉시트를 만든 결과예요. 파일 생성과 사람 눈 품질 승인은 다른 증거이므로 아래에서는 확인한 동작과 아직 확인하지 못한 결과를 나눠 설명할게요.

어떤 파일이 어떤 순서로 들어갈까

PNG와 JPEG 파일명 목록을 원하는 배열 순서대로 확인하는 장면

이 스크립트는 입력 폴더 바로 아래에 있는 PNG·JPG·JPEG 파일만 고릅니다. 하위 폴더 안의 사진, HEIC·WEBP·RAW 파일은 대상에 들어오지 않아요.

여기서 ‘폴더를 읽는다’는 말은 폴더 전체를 깊숙이 뒤진다는 뜻이 아니에요. Python의 pathlib로 입력 폴더의 바로 아래 항목을 열거한 뒤, 확장자를 소문자로 바꿔 허용 목록과 맞는지 확인합니다. 출력 파일이 같은 입력 폴더 안에 있다면 그 파일 자체는 다시 넣지 않도록 실제 경로도 비교해요.

선택된 경로는 sorted로 정렬됩니다. 촬영 날짜나 사진 속 시간 정보가 아니라 파일 경로 이름을 기준으로 배열되는 구조예요. 원하는 순서가 있다면 실행 전에 파일명을 일정하게 맞추는 편이 낫습니다.

  • 들어가는 형식: .png, .jpg, .jpeg
  • 대소문자: .JPG처럼 대문자로 적혀 있어도 소문자로 바꿔 비교
  • 탐색 범위: 지정한 폴더의 바로 아래 파일
  • 정렬 기준: 선택된 Path의 이름 순서
  • 제외 대상: 출력 경로와 같은 파일

예를 들어 파일명이 photo_1.jpg, photo_2.jpg, photo_10.jpg라면 사람이 숫자를 세는 방식과 배열이 다르게 느껴질 수 있어요. 연속 번호가 중요하다면 photo_01.jpg처럼 자릿수를 맞춰 두는 방법이 편합니다. 이 예시는 정렬 원리를 설명한 것이며 실제 폴더의 처리 결과를 뜻하지는 않아요.

접촉시트가 해주는 일과 못 하는 일

비슷한 사진 두 장의 구도를 사람이 직접 비교하는 장면

접촉시트가 해주는 일은 사진을 비율에 맞춰 줄이고, 흰색 캔버스에 붙이고, 번호와 파일명을 적는 것까지예요. 어떤 사진이 중복인지, 얼굴이 잘렸는지, 초점이 괜찮은지는 판정하지 않습니다.

Pillow 공식 문서에서 Image.open은 이미지 파일을 열어 식별하고, Image.new는 지정한 크기와 색상의 새 이미지를 만드는 기능으로 설명돼요. 소유 스크립트는 이를 이용해 각 원본을 RGB로 바꾸고, 정해진 칸 안에 비율을 유지한 채 축소합니다. 남는 공간은 억지로 늘리지 않고 가운데에 배치해요.

각 사진 아래에는 01, 02처럼 두 자리 번호와 원래 파일명이 붙습니다. 사진 자체만 보고 헷갈릴 때 이름을 곧바로 대조할 수 있는 장치예요. 열 수와 칸 너비·높이는 실행 옵션으로 바꿀 수 있고, 지정하지 않으면 코드에 적힌 기본값을 사용합니다.

출력 캔버스의 가로 길이는 ‘열 수 × 칸 너비’로 정해져요. 세로 길이는 사진 수를 열 수로 나눠 필요한 행을 올림한 뒤, 사진 칸 높이와 라벨 공간을 합쳐 계산합니다. 마지막 행에 빈칸이 생길 수 있지만 오류는 아니에요.

그런데 실제 검수에서는 작은 미리보기만 보고 승인하면 안 됩니다. 비슷한 구도는 중복처럼 보일 수 있고, 축소 과정에서 흐림이나 작은 왜곡이 가려질 수도 있어요. 접촉시트에서 의심 후보를 표시한 뒤 그 파일만 원본 크기로 다시 여는 순서가 맞습니다.

  • 누락 확인: 예상한 파일명이나 번호가 배열에 보이는지 사람이 대조
  • 중복 후보 확인: 비슷한 장면이 연속으로 놓였는지 눈으로 표시
  • 구도 확인: 피사체가 크게 잘렸거나 방향이 이상한 후보를 표시
  • 최종 승인: 표시한 파일을 원본 크기로 다시 열어 사람이 결정

실행 전에 확인할 실패 경계

원본 사진과 검수용 복사본을 분리한 뒤 실행 전 조건을 확인하는 장면

입력 조건이 맞지 않으면 조용히 넘어가지 않고 실행이 멈출 수 있어요. 특히 확장자만 이미지처럼 보이고 실제 내용이 손상된 파일은 목록에 들어간 뒤 Pillow가 여는 과정에서 오류를 낼 수 있습니다.

코드에서 명시적으로 막는 값도 있어요. 열 수가 1보다 작거나 칸 너비와 높이가 각각 100보다 작으면 invalid sheet dimensions라는 메시지로 끝납니다. 입력 폴더에서 대상 이미지를 하나도 찾지 못하면 no PNG/JPEG images found로 멈춰요.

놓치기 쉬운 경계는 더 있습니다.

  • 입력 경로가 없거나 폴더가 아니면 디렉터리를 읽는 단계에서 오류가 날 수 있어요.
  • 손상됐거나 실제 형식을 식별할 수 없는 파일은 Image.open 단계에서 전체 실행을 멈출 수 있어요.
  • 출력 폴더는 자동으로 만들지만 해당 위치에 쓸 권한이 없으면 저장할 수 없어요.
  • 출력 확장자를 Pillow가 저장 형식으로 알아보지 못하면 저장 단계에서 실패할 수 있어요.
  • 이미지가 매우 많거나 해상도가 지나치게 크면 메모리 사용량과 Pillow의 큰 이미지 안전 경고를 따로 살펴야 해요.
  • 파일명 라벨이 길면 현재 코드는 자동 줄바꿈이나 말줄임 처리를 하지 않아요.

라벨 위치도 실제 결과에서 확인해야 할 부분이에요. 현재 코드는 축소 이미지가 세로로 짧을수록 가운데 여백이 생기고, 그 이미지의 위치를 기준으로 라벨을 아래에 적습니다. 사진 비율과 파일명 길이가 제각각이라면 라벨이 의도한 칸 안에 잘 들어오는지 출력물을 직접 봐야 해요. 아직 그 결과를 사람 눈으로 확인하지 않았으므로 ‘라벨이 모두 정상’이라고 단정할 수 없습니다.

삭제보다 먼저 검수 순서를 정하세요

안전한 순서는 원본 보존, 검수용 복사본 준비, 접촉시트 생성, 의심 후보 표시, 원본 재확인이에요. 접촉시트는 삭제 프로그램이 아니어서 원본을 직접 지우지는 않지만, 검수 뒤 사람이 파일을 정리할 때 잘못 고를 수 있으니 원본과 작업 폴더를 분리하는 편이 좋습니다.

  1. 원본 사진 폴더를 그대로 보존해요.
  2. 검수할 PNG·JPEG를 별도 폴더에 복사해요.
  3. 원하는 배열에 맞춰 파일명을 정리해요.
  4. 출력 파일은 입력 사진과 구분되는 경로와 이름으로 지정해요.
  5. 생성 성공 메시지와 실제 출력 파일을 함께 확인해요.
  6. 접촉시트에서 표시한 후보만 원본 크기로 다시 열어요.
  7. 사람이 실제 이미지를 본 뒤에만 승인이나 삭제를 결정해요.

확인한 기준

2026년 8월 11일에 Pillow 안정판 Image 문서와 Python pathlib 문서를 publish/round_0811_r1/artifacts/make_contact_sheet.py의 코드에 대조했어요. Pillow에서는 이미지 열기와 새 이미지 생성, 식별할 수 없는 이미지와 큰 이미지의 오류·경고 범위를 확인했습니다. pathlib에서는 디렉터리 항목과 경로·확장자 처리 기준을 확인했어요.

대표 실행에서는 PNG 3장을 파일명순으로 배치한 접촉시트 파일 생성을 확인했습니다. 처리 속도와 장기 성공률, 사람 눈으로 보는 이미지 품질 승인은 확인하지 않았어요. 접촉시트 생성 성공과 사진 품질 승인은 서로 다른 기록으로 남겨야 합니다.

이 글이 필요한 경우여러 사진을 하나씩 열어 보느라 누락과 중복 후보를 한눈에 비교하기 어렵다.
이 방법이 맞지 않는 경우접촉시트만으로 이미지 품질 승인, 자동 중복 삭제, 손상 파일 복구까지 원하는 경우

원본을 보존하고 검수 순서 확인하기

반응형