| import fitz | |
| from PIL import Image | |
| from langchain_community.document_loaders import PyMuPDFLoader | |
| class ImagePDFLoader(PyMuPDFLoader): | |
| def load_pdf_page(self, page: fitz.Page, dpi: int) -> Image.Image: | |
| pix = page.get_pixmap(matrix=fitz.Matrix(dpi / 72, dpi / 72)) | |
| image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) | |
| if pix.width > 3000 or pix.height > 3000: | |
| pix = page.get_pixmap(matrix=fitz.Matrix(1, 1), alpha=False) | |
| image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) | |
| return image | |
| def load(self) -> list[Image.Image]: | |
| images = [] | |
| doc = fitz.open(self.file_path) | |
| for i in range(len(doc)): | |
| page = doc[i] | |
| image = self.load_pdf_page(page, dpi=250) | |
| images.append(image) | |
| return images | |