관리 메뉴

솜씨좋은장씨

[Python] pdf 파일을 이미지로 변환하는 여러가지 방법 ( feat. pdf2image, tifffile, wand, ImageMagick ) 본문

Programming/Python

[Python] pdf 파일을 이미지로 변환하는 여러가지 방법 ( feat. pdf2image, tifffile, wand, ImageMagick )

솜씨좋은장씨 2020. 12. 19. 16:32
728x90
반응형

각 페이지별 이미지 변환 ( pdf to jpg ) - pdf2image 활용

여러 페이지로 구성되어있는 pdf 파일을 각 페이지별 이미지로 변환하는 방법에 대해서 적어보려 합니다.

먼저 이 과정을 진행하기 위해서 필요한 라이브러리를 설치합니다.

 

pdf2image

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

pypi.org

 pip install pdf2image 

 

그 다음 아래의 코드를 활용하여 pdf파일의 각 페이지를 jpg 이미지로 변환하면 됩니다.

#-*- coding:utf-8 -*-

from pdf2image import convert_from_path

file_name = "pdf파일.pdf"

pages = convert_from_path("./source/" + file_name)

for i, page in enumerate(pages):
	page.save("./source/"+file_name+str(i)+".jpg", "JPEG")

 

만약 pdf파일의 페이지가 3페이지라면 source 디렉토리에 파일이름1.jpg, 파일이름2.jpg, 파일이름3.jpg 이렇게 저장됩니다.

여러 페이지를 담은 pdf 파일을 multipage tiff 파일로 변환하기 ( pdf to multipage tiff ) - tifffile

먼저 위의 각 페이지별 이미지 전환 과정을 모두 진행하여 각 페이지별 jpg 파일을 source 디렉토리에 저장하여 둡니다.

 

필요한 라이브러리를 설치합니다.

 

tifffile

Read and write TIFF(r) files

pypi.org

pip install tifffile

 

그 다음 아래의 코드를 활용하여 위의 과정에서 저장한 source 디렉토리에 있는 jpg 파일을 활용하여 

multipage tiff 파일을 생성합니다.

#-*- coding:utf-8 -*-
from __future__ import print_function
import glob
from PIL import Image
import tifffile
import numpy

def PIL2array(img):
    """ Convert a PIL/Pillow image to a numpy array """
    return numpy.array(img.getdata(), numpy.uint8).reshape(img.size[1], img.size[0], 3)

FRAMES = []
FIRST_SIZE = None
OUT_NAME = "./source/test/test.tiff"

filelist = glob.glob("source/test/*.jpg")

for fn in filelist:
    img = Image.open(fn)
    if FIRST_SIZE is None:
        FIRST_SIZE = img.size
    if img.size == FIRST_SIZE:
        print ("Adding:", fn)
        FRAMES.append(img)
    else:
        print ("Discard:", fn, img.size, "<>", FIRST_SIZE)

print("Writing", len(FRAMES), "frames to", OUT_NAME)
with tifffile.TiffWriter(OUT_NAME) as tiff:
    for img in FRAMES:
        tiff.save(PIL2array(img),  compress=6)
print("Done")

 

여러 페이지를 담은 pdf 파일을 multipage tiff 파일로 변환하기 ( pdf to multipage tiff ) - wand, ImageMagick

위의 두 가지 방법 이외에도 한번에 pdf를 multipage tiff 로 바꿀 수 있는 방법도 있습니다.

이 방법은 설치가 조금 까다로운 반면에 조금 더 간편하게 변환이 가능합니다.

 

현재는 Ubuntu 에서만 제대로 실행됩니다. Windows도 해결되는대로 해결방법과 함께 업데이트 하겠습니다.

 

먼저 필요 라이브러리를 설치합니다.

 

[Python] wand 설치 ( feat. ImageMagick )

wand 라이브러리 설치 $ pip install wand 위의 라이브러리는 ImageMagick이라는 것을 활용하므로 이것도 같이 설치해주어야 합니다. ImageMagick 설치 Ubuntu 에서 설치하는 방법 sudo apt-get install libmagic..

somjang.tistory.com

from wand.api import library
from wand.image import Image

def convert_file(filename):
    with Image(filename=filename, resolution=200) as img:
        img.type = 'grayscale'
        img.compression = "group4"

        library.MagickResetIterator(img.wand)
        for idx in range(library.MagickGetNumberImages(img.wand)):
            library.MagickSetIteratorIndex(img.wand, idx)
            img.alpha_channel = 'off'
        img.save(filename="test2.tiff")


if __name__=="__main__":
    convert_file("./test.pdf")

 

읽어주셔서 감사합니다.

Comments