Python으로 PDF 파일을 JPG 또는 PNG 이미지로 변환하는 방법

Python의 pdf2image 라이브러리를 사용하여 PDF 파일의 모든 페이지를 JPG 또는 PNG 형식의 이미지로 쉽게 변환하는 방법을 배워보세요. 단계별 튜토리얼과 코드 예제를 제공합니다.
Python으로 PDF 파일을 JPG 또는 PNG 이미지로 변환하는 방법
Photo by CURVD® / Unsplash

On this page

PDF 파일을 JPG나 PNG로 변환하기 위해서는 몇 가지 외부 라이브러리를 사용할 수 있습니다. 여기서는 가장 대중적인 라이브러리 중 하나인 pdf2image를 사용하는 방법을 설명하겠습니다. pdf2image는 PDF 문서에서 이미지를 추출하여 JPG, PNG 등의 포맷으로 저장할 수 있도록 해줍니다.

설치

먼저 필요한 라이브러리를 설치해야 합니다. pdf2image와 PDF 파일을 처리하기 위한 Pillow (PIL Fork) 라이브러리를 설치하세요:

pip install pdf2image Pillow

코드 예제

아래는 PDF 파일의 모든 페이지를 PNG 이미지로 변환하는 간단한 예제 코드입니다.

from pdf2image import convert_from_path

# PDF 파일 경로
pdf_path = 'example.pdf'
# 결과 이미지를 저장할 폴더
output_folder = '/path/to/output/folder'

# PDF 파일을 이미지 리스트로 변환
images = convert_from_path(pdf_path)

# 각 페이지를 이미지 파일로 저장
for i, image in enumerate(images):
    image_path = f'{output_folder}/page_{i + 1}.png'
    image.save(image_path, 'PNG')
    print(f'Saved {image_path}')

여러 페이지 처리

위 코드는 PDF의 모든 페이지를 순회하며 각 페이지를 별도의 이미지 파일로 저장합니다. convert_from_path 함수는 PDF 파일의 각 페이지를 PIL 이미지 객체의 리스트로 반환합니다. 이 리스트를 순회하면서 각 이미지를 원하는 포맷으로 저장할 수 있습니다.

포맷 변환

만약 JPG로 저장하고 싶다면, image.save 함수에서 파일 포맷을 'JPEG'로 지정하고 파일 확장자를 .jpg로 변경하세요.

image.save(image_path, 'JPEG')

고급 설정

convert_from_path 함수는 다양한 파라미터를 제공하여 변환 과정을 세밀하게 조정할 수 있습니다. 예를 들어, 출력 이미지의 DPI를 설정하거나, 특정 페이지만 변환하는 등의 작업이 가능합니다. 공식 문서나 해당 라이브러리의 GitHub 페이지에서 더 많은 정보를 얻을 수 있습니다.

이 방법을 통해 PDF 파일을 이미지로 효율적으로 변환할 수 있으며, 대량의 문서 처리에도 적합합니다.


이미지로 변환할 때 파일 크기를 (예를들어) 200KB 이하로 제한하려면, 이미지를 저장할 때 압축 수준을 조절하거나 해상도를 조절해야 합니다. Pillow 라이브러리를 활용하여 이미지의 품질을 조절하고 저장하는 방법을 살펴보겠습니다.

해상도 조절

이미지의 해상도를 낮추어 파일 크기를 줄일 수 있습니다. 해상도를 낮추면 이미지의 디테일이 감소하므로 적절한 해상도를 찾는 것이 중요합니다.

품질 조절

JPEG 형식으로 저장할 때는 quality 파라미터를 사용하여 품질을 조절할 수 있습니다. PNG의 경우 optimize=True를 설정하여 약간의 파일 크기 감소를 얻을 수 있습니다.

코드 예제

아래 코드는 PDF의 각 페이지를 변환한 후, 이미지의 해상도를 조절하고 파일 크기가 200KB를 넘지 않도록 품질을 조정하는 방법을 보여줍니다. JPEG 형식을 사용하여 예제를 제공하겠습니다.

from pdf2image import convert_from_path
import os

# PDF 파일 경로와 출력 폴더
pdf_path = 'example.pdf'
output_folder = '/path/to/output/folder'

# PDF를 이미지로 변환
images = convert_from_path(pdf_path)

for i, image in enumerate(images):
    # 이미지 해상도 조절 (옵션, 필요에 따라 조정)
    image = image.resize((int(image.width * 0.75), int(image.height * 0.75)), resample=Image.LANCZOS)

    # 초기 품질 설정
    quality = 95
    while True:
        # 이미지 저장 경로 및 파일명
        image_path = f'{output_folder}/page_{i + 1}.jpg'
        # 이미지 저장
        image.save(image_path, 'JPEG', quality=quality)

        # 파일 크기 체크
        if os.path.getsize(image_path) > 200 * 1024:  # 200KB 보다 크면
            quality -= 5  # 품질 5% 감소
            if quality < 10:  # 최소 품질 설정
                break
        else:
            break

    print(f'Saved {image_path} at quality {quality} with size {os.path.getsize(image_path)/1024:.2f}KB')

이 코드는 PDF의 각 페이지를 변환 후, 저장되는 파일의 크기가 200KB를 초과하면 JPEG의 품질을 점진적으로 감소시켜 파일 크기를 줄입니다. 해상도를 조절하는 코드 라인은 옵션으로, 필요에 따라 주석 처리하거나 조절할 수 있습니다. 파일 크기가 원하는 범위에 들어갈 때까지 품질을 조절하는 방식을 사용하므로, 파일 크기와 품질 사이의 균형을 적절히 맞출 수 있습니다.


공식 홈페이지

pdf2image
A wrapper around the pdftoppm and pdftocairo command line tools to convert PDF to a PIL Image list.

Subscribe to Keun's Story newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!