PDF 이미지 추출
PDF 안에 포함된 이미지를 모두 꺼내서 개별 PNG 또는 .zip 파일로 다운로드할 수 있어요. 모든 처리는 브라우저 안에서 진행되며 업로드가 없어요.
- PDF를 끌어다 놓거나 "파일 찾아보기"를 누르세요.
- "이미지 추출"을 누르면 썸네일 그리드가 나타나요.
- 썸네일을 눌러 개별 다운로드하거나, ".zip 으로 모두 다운로드"로 묶음 받으세요.
- 이미지는 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를 나눠서 각 섹션을 따로 처리하세요.