PDF 이미지 추출

PDF 안에 포함된 이미지를 모두 꺼내서 개별 PNG 또는 .zip 파일로 다운로드할 수 있어요. 모든 처리는 브라우저 안에서 진행되며 업로드가 없어요.

PDF를 여기에 놓으세요 또는
  1. PDF를 끌어다 놓거나 "파일 찾아보기"를 누르세요.
  2. "이미지 추출"을 누르면 썸네일 그리드가 나타나요.
  3. 썸네일을 눌러 개별 다운로드하거나, ".zip 으로 모두 다운로드"로 묶음 받으세요.
  4. 이미지는 PNG로 저장돼요 — 원본 인코딩을 캔버스에서 디코딩한 결과입니다.
어떤 도구인가요?

PDF의 모든 페이지를 순회하면서 paintImageXObject 연산을 찾아 그 아래의 이미지 비트맵을 추출합니다. 각 이미지는 캔버스를 거쳐 PNG로 정규화돼요 — 원본이 JPEG라면 압축은 사라지지만 픽셀 자체는 PDF가 표시한 것과 동일해요. 지원되지 않는 코덱(JBIG2, 팩스용 CCITT, JPEG 2000의 JPX)은 카운트에는 포함되지만 디코딩되지 않아요 — 그쪽은 pdfjs-dist 외의 전용 코덱 라이브러리가 필요합니다.

자주 만나는 이슈

PDF 이미지 추출은 본질적으로 코덱에 의존해요. 대부분의 PDF는 잘 동작하지만, 결과가 의외로 보일 수 있는 패턴이 있어요.

  • 지원되지 않는 이미지 코덱. JBIG2(일부 스캔 문서), CCITT(팩스 스타일 스캔), JPEG 2000(JPX)은 디코딩되지 않아요. 상태 라인에 건너뛴 개수가 표시됩니다. 이런 이미지는 /pdf-to-images 로 페이지 자체를 래스터화하면 함께 추출돼요.
  • JPEG 원본 품질 손실. 투명도 보존과 이중 압축 아티팩트 회피를 위해 PNG로 출력해요. PDF 안의 원본이 JPEG라면 PNG 결과는 더 크지만, pdf-lib가 디코딩한 픽셀과 동일합니다.
  • 인라인 이미지 누락. 일부 PDF는 XObject 대신 인라인 이미지 데이터(BI/ID/EI 연산자)를 사용해요 — 보통 아주 작은 이미지들이에요. v1 은 이를 추출하지 않아요. 사진과 스크린샷은 대부분 XObject 라서 정상적으로 추출됩니다.
  • 같은 이미지가 여러 번 나옴. PDF 는 종종 하나의 이미지 XObject 를 여러 페이지에서 참조해요. v1 은 paintImageXObject 호출마다 한 번 추출하므로, 반복되는 로고는 사용 횟수만큼 나타납니다. 필요하면 파일명이나 해시로 중복 제거하세요.
  • 암호화된 PDF. 비밀번호로 보호된 PDF는 비밀번호 없이 열 수 없어요. 소유자 비밀번호가 있다면 먼저 /pdf-unlock 으로 처리하세요.
  • 아주 큰 PDF. 추출된 각 이미지는 페이지를 떠나거나 Clear 를 누를 때까지 브라우저 메모리에 남아요. 고해상도 이미지가 수백 장 있는 PDF는 수백 MB의 RAM을 사용할 수 있어요. .zip 다운로드를 빨리 받고 작업 후 Clear를 눌러 주세요.
자주 묻는 질문

왜 결과가 JPG가 아니라 PNG 인가요?

PNG 는 투명도를 보존하고 재인코딩 아티팩트를 피해요. 픽셀은 원본과 같지만 무손실이라 파일이 더 큽니다. 용량이 중요하다면 결과를 /image-compress 의 WebP 모드로 한번 더 처리하세요.

각 이미지가 어느 페이지에서 왔는지 어떻게 알 수 있나요?

파일명은 `pageN-imgM.png` 형식이에요 — N 은 출처 페이지 번호, M 은 그 페이지 내의 일련번호입니다. 파일명으로 정렬하면 PDF 내 등장 순서대로 보여요.

암호화된 이미지는 깨져서 나오나요?

암호화되지 않은 PDF 안의 이미지 데이터는 별도로 암호화돼 있지 않아서 정상적으로 디코딩돼요. PDF 자체가 암호화돼 있다면 이 도구는 아예 읽지 못해요(위 암호화 PDF 항목 참고).

왜 카운트가 보이는 이미지 수보다 많나요?

일부 PDF는 보이는 이미지 한 장당 여러 XObject를 사용해요(예: 알파 마스크가 별도 그레이스케일 이미지로 저장된 경우). v1 은 각각 추출해요 — 합성 시 메인 이미지를 보기 좋게 만드는 소프트 마스크는, 단독으로 보면 흑백 실루엣처럼 보입니다.

PDF가 어디론가 업로드되나요?

아니요. 모든 처리는 브라우저 안에서 진행돼요. PDF는 pdfjs-dist 가 파싱하고 이미지 비트맵은 캔버스에서 렌더링되며, 모두 클라이언트 사이드에서 일어납니다. 네트워크 요청은 발생하지 않아요.

얼마나 큰 PDF까지 처리되나요?

약 100 MB 까지는 무리 없이 동작해요. 한계는 탭 메모리예요 — 추출 중 OOM 이 나면 /pdf-split 으로 PDF를 나눠서 각 섹션을 따로 처리하세요.