Как извлечь изображения из PDF c помощью Python, сохраняя их качество?

Есть несколько способов извлечь изображения из файла PDF. Самый простой способ – просто сделать снимок экрана с изображением, присутствующим на любой странице PDF-файла, и обрезать изображение в соответствии с вашими требованиями. Этот способ выглядит очень простым, но что, если в файл PDF содержит 100 или 1000 изображений, и вы хотите, чтобы все они были в отдельной папке. Тогда этот подход будет утомительным и трудоемким и нам нужно автоматизировать этот процесс, а язык программирования Python сделает это за вас.

Если вы думаете, что можете использовать любой онлайн-инструмент, то вы ставите под угрозу безопасность своих данных. Почему вам нужно полагаться на любую онлайн-платформу, если вы можете выполнить ту же задачу, запустив простой скрипт Python на своем компьютере?

Установка необходимых библиотек

В этой статье мы будем использовать библиотеку Python PyMuPDF (также известную как «fitz»), которая представляет собой легкую программу просмотра PDF и XPS. Эта библиотека может получить доступ к файлам в форматах: PDF, XPS, комиксов и художественных книг. И она известна своей высочайшей производительностью и высоким качеством рендеринга.

Вы можете установить этот пакет с помощью следующей команды в терминале (пользователи Linux) или командной строке (пользователи Windows).

$pip3 install PyMuPDF

Написание скрипта Python для извлечения всех изображений в файл pdf

Мы напишем скрипт для очистки изображений из файла PDF. Итак, приступим, для этого нам понадобится интерпретатор Python и idle.

#импорт необходимых библиотек import fitz #открытия файла file_path = input("Введите путь к PDF файлу") pdf_file = fitz.open(file_path) # Чтение места, где сохранить файл location = input("Enter the location to save: ") #поиск количества страниц в pdf number_of_pages = len(pdf_file) #итерация по каждой странице в pdf for current_page_index in range(number_of_pages): # итерация по каждому изображению на каждой странице PDF for img_index,img in enumerate(pdf_file.getPageImageList(current_page_index)): xref = img[0] image = fitz.Pixmap(pdf_file, xref) # если это чёрно-белое или цветное изображение if image.n < 5: image.writePNG("{}/image{}-{}.png".format(location,current_page_index, img_index)) #если это CMYK: конвертируем в RGB else: new_image = fitz.Pixmap(fitz.csRGB, image) new_image.writePNG("{}/image{}-{}.png".foramt(location,current_page_index, img_index))

Примечание:

Пользователю необходимо ввести путь к файлу pdf: укажите абсолютный путь, по которому находится файл pdf. Пользователь должен указать, где изображения должны быть сохранены.

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

Давайте запустим этот скрипт, используя образец PDF представленный ниже:

Как извлечь изображения из PDF c помощью Python, сохраняя их качество?
Как извлечь изображения из PDF c помощью Python, сохраняя их качество?

Образец PDF с изображениями

Когда мы запускаем скрипт Python для этого PDF-файла, мы получим все 6 изображений из PDF-файла в пользовательскую папку.

Как извлечь изображения из PDF c помощью Python, сохраняя их качество?

После ввода вышеуказанных данных все изображения будут извлечены из PDF в указанное пользователем место, как показано ниже.

Как извлечь изображения из PDF c помощью Python, сохраняя их качество?

Такой метод извлечения изображений является эффективным, если нам необходимо обработать большой объем данных формата PDF.

55
3 комментария

только качество не очень на выходе при этом способе

выдает ошибку AttributeError: 'Document' object has no attribute 'getPageImageList'

Автор

Добрый день! Приложите, пожалуйста, полный скрин с ошибкой, версию python и библиотеки fitz. Возможно, у вас более ранняя или поздняя версия библиотеки, в которой отсутствует атрибут, описанный ранее.

Рынок акций резко развернулся вниз! Распродажа бумаг началась?

В начале этой недели рынок акций продолжил рост, однако довольно быстро развернулся вниз и упал более чем на 200 пунктов по индексу ММВБ к концу недели. Это уже приличная и продолжительная коррекция, которую ранее рынку не давал реализовать безумный поток позитивных новостей. И нельзя сказать, что этот поток прекратился, но он теперь уже не такой п…

График (H1) индекса ММВБ
88
22
реклама
разместить
Трамп заявил, что в криптовалютный резерв США войдут BTC, ETH, XRP, SOL и ADA — крипторынок отреагировал ростом

Создание резерва поспособствует развитию «критически важной индустрии».

Дополнено в 20:37 мск. Курс BTC вырос до $93,6 тысячи за монету.

66
33
22
Трамп пздабол, клоун
Неплохо все расписали!!
Масспостинг на Авито: черные и белые методы продвижения

Масспостинг — один из самых спорных инструментов работы на Авито. Одни видят в нем эффективный способ увеличения продаж, другие — нарушение правил и прямой путь к блокировке. Рассмотрим в статье как этот механизм работает, каковы его последствия и можно ли использовать его легально.

Масспостинг на Авито: черные и белые методы продвижения
99
11
Как же меня достали эти созвоны из кофеен!
Как же меня достали эти созвоны из кофеен!

Тренд текущего времени - впарить себя через чат с ником похожим на собачью кличку и оплатой криптой. Оплата конечно же вперед и 100%.

1717
22
11
11
Как много воды, неинтересно читать.
Сооснователь Google Сергей Брин рекомендовал ИИ-подразделению Google DeepMind работать по 60 часов в неделю

И посоветовал сотрудникам приходить в офис «хотя бы» в будни, чтобы выиграть гонку за AGI.

Сергей Брин. Источник фото: Kelly Sullivan / Getty Images
2525
22
11
работайте больше чтобы ии поскорее вас всех заменил, а то надоели уже тут мешки кожаные в офисах
Как построить успешный бизнес в 4 шагах, или 16 лет опыта в 1 статье:
Как построить успешный бизнес в 4 шагах, или 16 лет опыта в 1 статье:

Помните, что качественное создание базы - это инвестиция в долгосрочный рост продаж. Не стоит торопиться и пропускать важные этапы, так как это может привести к проблемам в будущем.

Мой портфель акций на 2 марта 2025

Февраль закончился, акции скорректировались после второго Трамп-ралли. Вместе с зимой закончился и бюджет на покупки акций, которые я продолжаю покупать в свой портфель. Посмотрел, как идут успехи с приведением его к целевым значениям. Размер портфеля составляет 2,357 млн рублей.

Мой портфель акций на 2 марта 2025
1212
[]