DevGang
Авторизоваться

Извлечение изображений из файла PDF с помощью Python и библиотек Fitz и Pillow

В этом блоге мы узнаем, как читать и извлекать содержимое (как текст, так и изображения), вращать отдельные страницы и разбивать документы на отдельные страницы.  В этой статье более подробно рассмотрим извлечение изображений из pdf-файлов с помощью Pillow и библиотеки Fitz.

Приведенный ниже код извлекает изображения из файла PDF с помощью библиотеки fitz. Сначала он открывает файл PDF с помощью fitz.open() и перебирает все страницы в PDF с помощью len(pdf_file). Для каждой страницы он извлекает все изображения на странице с помощью page.get_images() и перебирает их с помощью enumerate(). Затем он извлекает байты изображения с помощью pdf_file.extract_image(xref) и загружает их в изображение PIL с помощью Image.open(io.BytesIO(image_bytes)). Наконец, он сохраняет изображение на диск с помощью image.save() с именем файла, основанным на исходном имени файла, номере страницы и номере изображения.

Также обратите внимание, что fitz и pillow не является встроенной библиотекой Python, поэтому вам может потребоваться установить ее отдельно, используя pip install PyMuPDF Pillow.

import os
import pandas as pd
from PIL import Image
from io import BytesIO
import fitz
import io

file = 'useR_PrecTemp.pdf'
print(file)

target_name = f"{file}"
print(target_name)

pdf_file = fitz.open(file)
    # print ("number of pages: %i" % doc.pageCount)

    # page1 = doc.load_page(0)
    # page1text = page1.get_text("text")
    # print(page1text)

for page_index in range(len(pdf_file)):

    # get the page itself
    page = pdf_file[page_index]
    image_list = page.get_images()

    # printing number of images found in this page
    if image_list:
        print(f"[+] Found a total of {len(image_list)} images in page {page_index}")
    else:
        print("[!] No images found on page", page_index)
    for image_index, img in enumerate(page.get_images(), start=1):

        # get the XREF of the image
        xref = img[0]

        # extract the image bytes
        base_image = pdf_file.extract_image(xref)
        image_bytes = base_image["image"]

        # get the image extension
        #image_ext = base_image["ext"]

        # load it to PIL
        image = Image.open(io.BytesIO(image_bytes))

        # save it to local disk
        image.save(f"{target_name}_{page_index+1}_{image_index}.jpeg")

Вы получите вывод, как показано ниже:

Этот код способен определить общее количество изображений, присутствующих на каждой странице файла PDF. Более того, он предназначен для сохранения каждого из этих изображений с их исходными именами файлов и соответствующим номером страницы, на которой они были обнаружены.

Каждый разработчик в своей жизни встречается с тем, что приходится конвертировать изображения PNG в изображение JPG. Приглагаем вам создать один такой скрипт, который преобразует изображения из одного формата файла (типа изображения) в другой - всего за 6 строк кода.

Не малую часть работы составляет также передача данных из одного сервиса в другой без потери качества. Задача тривиальна и требует решения. Нам поможет Python Flask: отправляем файлы и данные формы из одного сервиса в другой.

#Flask #Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу