본문 바로가기

개발하자

Python을 사용하여 PDF에서 고해상도 이미지 추출

반응형

Python을 사용하여 PDF에서 고해상도 이미지 추출

아래 코드로 여러 PDF 페이지에서 이미지를 추출할 수 있었지만 해상도가 상당히 낮습니다. 그것을 조정할 방법이 있나요?

import fitz    
pdffile = "C:\\Users\\me\\Desktop\\myfile.pdf"
doc = fitz.open(pdffile)
for page_index in range(doc.pageCount):
    page = doc.loadPage(page_index)  
    pix = page.getPixmap()
    output = "image_page_" + str(page_index) + ".jpg"
    pix.writePNG(output)

나는 또한 코드를 사용하려고 시도했고 if pix.n < 5"를 "if pix.n - pix.alpha < 4"로 업데이트했지만 내 경우에는 이것이 어떤 이미지도 출력하지 않았다.




PyMuPDF의 이번 호에서 언급한 바와 같이, 당신은 매트릭스를 사용해야 한다: .

예는 다음과 같습니다:

zoom = 2    # zoom factor
mat = fitz.Matrix(zoom, zoom)
pix = page.getPixmap(matrix = mat, <...>)

또한 이 문제에 표시된 것은 매트릭스를 사용하지 않을 경우 기본 해상도가 72dpi로 낮은 해상도를 얻을 수 있다는 것입니다.




의 설명서는 행렬을 만드는 것보다 훨씬 더 간단하며, 고해상도를 위해 인수를 사용할 수 있음을 보여줍니다:

pix = page.getPixmap(dpi=200)

이것은 v1.19.2의 새로운 기능입니다.




최상의 품질을 얻으려면 'matrix'와 'dpi'를 사용하십시오. 이 코드는 결과의 고해상도 문제를 해결한다. 폴더의 모든 파일을 최상의 품질로 변환하는 솔루션을 구현합니다:

# pip install fitz
# pip install pip install PyMuPDF==1.19.0

import fitz
import glob

for filename in glob.glob("*.pdf"):
    pdffile = filename
    doc = fitz.open(pdffile)
    for page_index in range(doc.pageCount):
        try:
            page = doc.load_page(page_index)  
            zoom = 2 
            mat = fitz.Matrix(zoom, zoom)
            pix = page.get_pixmap(matrix = mat,dpi=1200)
            output = '_' + filename.replace(".pdf","") + "-" + str(page_index) + ".png"
            pix.save(output)
        except Exception as e:
            print(str(filename) + ' > ' + str(e))    
    doc.close()

반응형